提问人:yosef 提问时间:11/1/2023 最后编辑:Timur Shtatlandyosef 更新时间:11/1/2023 访问量:50
对嵌套字典进行排序
Sorting a nested dictionary
问:
我想根据点对这个字典中的团队进行排序,我已经遵循了这篇文章中的建议,我写的排序代码没有按照我想要的方式工作。
这是我的字典:
{
'Spain': {
'wins': 3,
'loses': 0,
'draws': 0,
'goal difference': 4,
'points': 9
},
'Iran': {
'wins': 0,
'loses': 3,
'draws': 0,
'goal difference': -6,
'points': 0
},
'Portugal': {
'wins': 2,
'loses': 1,
'draws': 0,
'goal difference': 4,
'points': 6
},
'Morocco': {
'wins': 1,
'loses': 2,
'draws': 0,
'goal difference': -2,
'points': 3
}
}
以及我用于排序的代码:
sorted_dict = OrderedDict(sorted(B_group.items(),key= lambda x: x[1]["points"] ,reverse=True))
这是我得到的结果:
Spain wins:3 , loses:0 , draws:0 , goal difference:4 , points:9
Iran wins:0 , loses:3 , draws:0 , goal difference:-6 , points:0
Portugal wins:2 , loses:1 , draws:0 , goal difference:4 , points:6
Morocco wins:1 , loses:2 , draws:0 , goal difference:-2 , points:3
我希望它把最高分的球队放在第一位,例如,西班牙、葡萄牙、摩洛哥、伊朗在这个名单中。 我写的排序代码有问题吗?
答:
-1赞
Timur Shtatland
11/1/2023
#1
您不需要,因为 Python 3.7 字典保持插入顺序。请参阅:依赖 python 字典的插入顺序是好的做法吗? - 软件工程堆栈交换OrderedDict
使用适当的索引来访问字典值,如下所示:
dct = {
'Spain': {'wins': 3, 'loses': 0, 'draws': 0, 'goal difference': 4, 'points': 9},
'Iran': {'wins': 0, 'loses': 3, 'draws': 0, 'goal difference': -6, 'points': 0},
'Portugal': {'wins': 2, 'loses': 1, 'draws': 0, 'goal difference': 4, 'points': 6},
'Morocco': {'wins': 1, 'loses': 2, 'draws': 0, 'goal difference': -2, 'points': 3}
}
sorted_dct = {k:dct[k] for k in reversed(sorted(dct, key = lambda x: dct[x]['points']))}
print(sorted_dct)
# {'Spain': {'wins': 3, 'loses': 0, 'draws': 0, 'goal difference': 4, 'points': 9}, 'Portugal': {'wins': 2, 'loses': 1, 'draws': 0, 'goal difference': 4, 'points': 6}, 'Morocco': {'wins': 1, 'loses': 2, 'draws': 0, 'goal difference': -2, 'points': 3}, 'Iran': {'wins': 0, 'loses': 3, 'draws': 0, 'goal difference': -6, 'points': 0}}
评论
dict
sorted_dict
B_group
B_group
sorted_dict