按最高值排序dict?

时间:2013-11-30 19:43:08

标签: python list dictionary

我有一个带字符串键和int值的dict。我有什么方法可以拿这个字典并用它来获取从最高到最低值的键列表?

示例:

>>> myDict = {'seven': 7, 'four': 4, 'one': 1, 'two': 2, 'five': 5, 'eight': 8}
>>> myList = myDict.sortNumericallyByKeys
>>> myList
['eight', 'seven', 'five', 'four', 'two', 'one']

4 个答案:

答案 0 :(得分:16)

sorted(myDict, key=myDict.get, reverse=True)

答案 1 :(得分:3)

这是一种方法:

>>> myDict = {'seven': 7, 'four': 4, 'one': 1, 'two': 2, 'five': 5, 'eight': 8} 
>>> sorted(myDict.iterkeys(), key=lambda k: myDict[k], reverse=True)
['eight', 'seven', 'five', 'four', 'two', 'one']

(灵感来自this回答)

它使用内置函数sortedreverse=True从最高到最低), key参数是一个设置排序键的函数。在这种情况下,它是一个lambda来获取相应的dict值,但它几乎可以是任何东西。例如,您可以使用operator.itemgetter(1)myDict.get,如其他答案所示,或任何其他排序函数(除了值)。

答案 2 :(得分:2)

您可以使用items获取对键值列表和sorted以使用您的条件对其进行排序:

myList = sorted(myDict.items(), key=lambda x: x[1], reverse=True)

如果您正在使用ipython,则可以输入myDict。tabtab,然后您将获得所有功能的列表。您也可以输入print myDict.items.__doc__并获取快速文档。

关键参数是在比较之前应用于元素的函数。当items返回一对对列表并对对的第二个元素进行排序时,key是一个从元组中获取第二个元素的函数。

当然,可以使用:

删除items来电
myList = sorted(myDict, key=myDict.get, reverse=True) #posted in another answer

答案 3 :(得分:2)

另一种变化:

import operator

d = {'q':2, 'x':1, 'b':10}
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)

operator模块提供itemgetter,旨在像这样使用。它比lambda快。 ; - )

修改

我有点误解了这个问题。我的解决方案返回一个元组列表(键,值),而不仅仅是一个字符串列表。

作为补偿的奖励,请查看collections.OrderedDict。您可能还想考虑使用dict'reverse'。例如切换键和值。