[英]Python sort a dict by multiple values on multiples levels
我有一个 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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.