Python按多个级别上的多个值对字典进行排序



我有一个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'