Python排序词典:键[升序]然后值[降序]

时间:2016-02-21 17:16:56

标签: python sorting

我已经找了很久但找不到实际的答案,因为我看不到任何以升序键开头,然后是降序值。

一个让它更清晰的例子:

d = {'banana':3, 'orange':5, 'apple':5}
out: [('apple', 5), ('orange', 5), ('banana', 3)]

在做了一些研究后,我得到了类似的东西:

sorted(d.items(), key=operator.itemgetter(1,0), reverse=True)
out: [('orange', 5), ('apple', 5), ('banana', 3)]

这是因为它对值和键进行了反向排序。我需要钥匙不要反转。

我真的很感激这里的一些帮助。提前谢谢!

2 个答案:

答案 0 :(得分:3)

你所要求的是不可能的。字典不仅无序(可以用OrderedDict来克服),但它们的键是唯一的,这意味着按键然后按值排序的想法是荒谬的。

您想要的是使用元组列表,或使用值为列表的OrderedDict(以便它们可以有多个值并进行排序。)

元组列表:

x = [(1,7), (5,3), (8,3), (1,4), (12,4), (12,7), (12,5)]
x.sort(key=itemgetter(1), reverse=True)
x.sort(key=itemgetter(0))
# result: [(1, 7), (1, 4), (5, 3), (8, 3), (12, 7), (12, 5), (12, 4)]

答案 1 :(得分:0)

与其他人一样,密钥在字典中是唯一的,因此如果按密钥对d.items()进行排序,则不再需要进行排序。但是如果你想先按降序值然后按升序键排序呢?

out = list(已排序(d.items(),key =(lambda item:( - item [1],item [0]))))

结果: [(' apple',5),(' orange',5),(' banana',3)]

说明: 排序元组时,会按顺序考虑元素。在上面的表达式中,我使用了从原始元组项中派生的新元组,翻转顺序并翻转数字的符号。