如何根据字典的多个值和一个键对包含字典的嵌套列表进行排序?

问题描述 投票:0回答:1

这是我的简单作业脚本的结果:

所以我想按第一个

points
,第二个
wins
对主列表进行排序,如果它们相等,则按团队名称的字母顺序排列。另外我必须反转第三个条件',因为主要排序函数reverse设置为True

这就是我已经走了多远:

 all_dicts_lst =  [{'Spain': 0, 'wins': 0, 'loses': 0, 'draws': 3, 'goal difference': 0, 'points': 3},
 {'Iran': 0, 'wins': 0, 'loses': 0, 'draws': 3, 'goal difference': 0, 'points': 3},
 {'Portugal': 0, 'wins': 0, 'loses': 0, 'draws': 3, 'goal difference': 0, 'points': 3},
 {'Morraco': 0, 'wins': 0, 'loses': 0, 'draws': 3, 'goal difference': 0, 'points': 3}]

j = sorted([list(x)[0] for x in all_dicts_lst]) # this will return the names of countries in a list
print (j)
sorted_all_dics = sorted( all_dicts_lst, key=lambda x: (x['points'] , x['wins'], j) , reverse= True )

但是结果是这样的:

Spain  wins:0 , loses:0 , draws:3 , goal difference:0 , points:3
Iran  wins:0 , loses:0 , draws:3 , goal difference:0 , points:3
Portugal  wins:0 , loses:0 , draws:3 , goal difference:0 , points:3
Morraco  wins:0 , loses:0 , draws:3 , goal difference:0 , points:3
python dictionary sorting key-value criteria
1个回答
0
投票

不要使用

reverse=True
。要按相反顺序对数字进行排序,请在创建键时取反。键的第三个元素应该是名称。
j
是所有名称的列表,而不是列表中特定元素的名称。

sorted_all_dics = sorted( all_dicts_lst, key=lambda x: (-x['points'] , -x['wins'], list(x)[0]))
© www.soinside.com 2019 - 2024. All rights reserved.