我有这本字典:
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)]
而不是上面的内容。有方便的方法吗?
答案 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}