按值对字典排序,但当值相同时

时间:2018-10-13 18:50:52

标签: python dictionary

我有这本字典:

long long

我目前知道如何按值从最大到最小的顺序对其进行排序:

a = {'Atlanta': 4, 'Bronx': 4, 'San Diego': 30}

我想做的是当两个键的值相同时,我想按相反的字母顺序对其进行排序。所以我想要的结果是:

s = sorted(a.items(), key = lambda t:t[1], reverse=True)

s = [('San Diego', 30), ('Atlanta', 4), ('Bronx', 4)]

而不是上面的内容。有方便的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以按相反的顺序对带有元组元素本身的元组进行排序:

s = sorted(a.items(), key = lambda t: t[::-1], reverse=True)

或者您可以通过以下方式使其更明确:

s = sorted(a.items(), key = lambda t: (t[1], t[0]), reverse=True)

以上方法之所以有效,是因为给定一个元组小于另一个元组,因为第一个元组的第一项小于另一个元组,或者两个项目相等,并且第一个元组的下一个项小于另一个元组。第二项,依此类推。因此,(a1, a2) < (b1, b2)被赋予a1 < b1 or (a1 == b1 and a2 < b2)。因此,这意味着通过交换两个元组项,我们首先比较值,然后比较键(如果这是平局)。

答案 1 :(得分:3)

您可以使用元组对次要条件进行排序

s = dict(sorted(a.items(), key= lambda x: (x[1], x[0]), reverse = True))
# {'San Diego': 30, 'Bronx': 4, 'Atlanta': 4}