我有一个带字符串键和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']
答案 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回答)
它使用内置函数sorted
(reverse=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'。例如切换键和值。