排序元组的列表中值,然后按字母顺序(Sort a list of tuples by value a

2019-07-04 00:20发布

一个python新手的一点,但我得到的元组下面的列表。 我需要的值对它进行排序,如果该值是相同的,按字母顺序解决关系。 下面是一个示例:

#original
list_of_medals = [('Sweden', 24), ('Germany', 16), ('Russia', 10), ('Ireland', 10), ('Spain', 9), ('Albania', 8), ('Lithuania', 7), ('Iceland', 6), ('Malta', 5), ('Italy', 5), ('Serbia', 4), ('Estonia', 4), ('Turkey', 4), ('Moldova', 2), ('Azerbaijan', 2)]
#                                                              \____/                                                                                                                      \_____/                                         \______/
#after sorting                                                 /    \                                                                                                                      /     \                                         /      \
sorted_medals  = [('Sweden', 24), ('Germany', 16), ('Ireland', 10), ('Russia', 10), ('Spain', 9), ('Albania', 8), ('Lithuania', 7), ('Iceland', 6), ('Malta', 5), ('Italy', 5), ('Estonia', 4), ('Serbia', 4), ('Turkey', 4), ('Azerbaijan', 2), ('Moldova', 2)]

它是也许可以与operator模块?

Answer 1:

您可以使用sorted功能:

sorted_by_medals = sorted(list_of_medals, key=lambda tup: (-tup[1], tup[0]))


Answer 2:

在这种情况下,我会使用一个lambda函数的key参数sort() / sorted()

In [59]: sorted(list_of_medals, key=lambda x:(-x[1],x[0]))
Out[59]: 
[('Sweden', 24),
 ('Germany', 16),
 ('Ireland', 10),
 ('Russia', 10),
 ('Spain', 9),
 ('Albania', 8),
 ('Lithuania', 7),
 ('Iceland', 6),
 ('Italy', 5),
 ('Malta', 5),
 ('Estonia', 4),
 ('Serbia', 4),
 ('Turkey', 4),
 ('Azerbaijan', 2),
 ('Moldova', 2)]

的否定x[1]是需要的奖牌以降序按升序排序国名进行排序(简单地设置reverse=True起不到这一点)。

正如一些人在评论中所指出的那样,一个更普遍的方式做一个复合键一个复杂的排序是执行数排序步骤。 要同时做到这一点,排序上的一个组成部分,从最低显著之一:

In [67]: temp = sorted(list_of_medals, key=itemgetter(0))

In [68]: sorted(temp, key=itemgetter(1), reverse=True)
Out[68]: 
[('Sweden', 24),
 ('Germany', 16),
 ('Ireland', 10),
 ('Russia', 10),
 ...

这依赖于一个事实,即Python的排序是稳定的,也就是说,是比较平等的项目从来没有重新排序。



文章来源: Sort a list of tuples by value and then alphabetically