Python 按最大值对dict排序?

Python 按最大值对dict排序?,python,list,dictionary,Python,List,Dictionary,我有一个带字符串键和int值的dict。有什么方法可以让我拿着这个dict,用它得到一个从最高值到最低值的键列表吗 例如: >>> myDict = {'seven': 7, 'four': 4, 'one': 1, 'two': 2, 'five': 5, 'eight': 8} >>> myList = myDict.sortNumericallyByKeys >>> myList ['eight', 'seven', 'five', '

我有一个带字符串键和int值的dict。有什么方法可以让我拿着这个dict,用它得到一个从最高值到最低值的键列表吗

例如:

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

您可以使用
获取成对键值的列表,并使用
排序
根据您的条件对它们进行排序:

myList = sorted(myDict.items(), key=lambda x: x[1], reverse=True)
如果您使用的是ipython,则可以键入myDict。
tabtab
,您将获得所有函数的列表。您还可以键入
打印myDict.items.\uuuu doc\uuuu
并快速获取文档

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

当然,可以使用以下方法摆脱
items
调用:

myList = sorted(myDict, key=myDict.get, reverse=True) #posted in another answer

这里有一种方法:

>>> 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']
(受答案启发)

它使用内置函数
排序
(使用
reverse=True
从最高到最低),
key
参数是一个设置排序键的函数。在本例中,lambda获取相应的dict值,但它几乎可以是任何东西。例如,您可以使用其他答案所示的
运算符.itemgetter(1)
myDict.get
,或任何其他排序函数(按值除外)。

另一种变体:

import operator

d = {'q':2, 'x':1, 'b':10}
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
operator
模块提供了
itemgetter
,其设计用途如下。它比羔羊还快

编辑:

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


作为弥补这一缺陷的奖励,请查看
collections.OrderedDict
。您可能还想考虑使用DICT“反转”。e、 g.切换键和值。

@ᴋᴇʏsᴇʀ我仔细查看了数据结构文档,没有发现任何内容。我还能去哪里看@ᴋᴇʏsᴇ难道这不是按字母顺序排序,而不是按数值排序吗?我得到的只是:p@GiovanniP一个更接近,但两者都不是完全重复的。无需反转列表,因为排序接受反向参数。
cmp
被贬低;改为使用
。谢谢你的观察。非常浓缩,但确实有点伤眼睛;-)@siebz0r,尽管应该这样做,而且只有这样做way@gg.kaspersky可能是这样,但可读性很重要;-)这是一本可读性很强的书。这本书实际上非常漂亮和优雅。@siebz0rFYI易于阅读和理解,切换字典键和值会有点奇怪(也比根据值排序键更困难)。如果您想这样做,您可能首先选择了错误的数据结构。
import operator

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