[英]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.