我有一个python列表,我将按多个键排序。
datas = {
'123': {
'name': 'Adam',
'nbgamesTot': 4,
'winrateTot': '100.00',
'D1': {
'nbwins': 4,
'nbgames': 4,
'winrate': 100
},
'D2': 'etc...',
},
'456': {
'name': 'Mark',
'nbgamesTot': 4,
'winrateTot': '25.00',
'D1': {
'nbwins': 1,
'nbgames': 4,
'winrate': 25
},
'D2': 'etc...',
},
'789': {
'name': 'Yoko',
'nbgamesTot': 4,
'winrateTot': '25.00',
'D1': {
'nbwins': 1,
'nbgames': 4,
'winrate': 25
},
'D2': 'etc...',
}
}
但是当我尝试的时候:
sorted_datas = sorted(datas.items(), key=lambda x: (x[1]['D1']['nbgames'], x[1]['nbgamesTot'], x[1]['winrateTot']), reverse=True)
我有:洋子:1/4 - 1/4 - 25马克:1/4 - 1/4 - 25亚当:4/4 - 4/4 - 100
你知道怎么了吗?也许itemgetter是个更好的主意?在这种情况下怎么办?
第二个问题:如果我想按照键的不同顺序排序?(例如:nbgames desc, nbgamestot asc,和winrate desc ?
提前感谢您的帮助
要修复语法错误,请将列表更改为如下内容:
datas = [
{
'123':
{
'name': 'Adam',
'nbgamesTot': 4,
'winrateTot':100,
'D1':
{
'nbgames' : 4,
'nb_win' : 4,
'winrate':100,
},
'D2': 'etc...,'
}
},
{
'456':
{
'name': 'Mark',
'nbgamesTot': 4,
'winrateTot':25,
'D1':
{
'nbgames' : 4,
'nb_win' : 1,
'winrate':25,
},
'D2': 'etc...,'
}
},
{
'789':
{
'name': 'Yoko',
'nbgamesTot': 4,
'winrateTot':25,
'D1':
{
'nbgames' : 4,
'nb_win' : 1,
'winrate':25
},
'D2': 'etc...,'
}
}
]
感谢我找到问题了。'winrateTot'在排序之前被格式化(2.f),因此被认为是类型'string'