按值排序元组列表,然后按字母顺序排序

时间:2012-11-20 21:18:20

标签: python list sorting import tuples

有点蟒蛇新手,但我得到了以下的元组列表。我需要按值对其进行排序,如果值相同,则按字母顺序解决关系。这是一个示例:

#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模块?

2 个答案:

答案 0 :(得分:11)

在这个例子中,我使用lambda函数作为key / sort()的{​​{1}}参数:

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

这依赖于Python的排序是稳定的,这意味着比较相等的项永远不会被重新排序。

答案 1 :(得分:5)

您可以使用sorted功能:

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