如何按值对 Python 字典进行排序? [复制]

Posted

技术标签:

【中文标题】如何按值对 Python 字典进行排序? [复制]【英文标题】:How to sort a Python dictionary by value? [duplicate] 【发布时间】:2012-08-09 14:08:46 【问题描述】:

可能重复:In Python how do I sort a list of dictionaries by values of the dictionary?Sorting Python dictionary based on nested dictionary values

我有如下形式的字典:

a_dict =  'e': (1, 100), 'a': (2, 3) 

我无法按元组的第二个元素对其进行排序。结果字典将如下所示:

a_dict =  'a': (2, 3), 'e': (1, 100) 

【问题讨论】:

@Tichodroma:这是一个字典列表,这只是一个字典,不在列表中。 【参考方案1】:

在您的示例中,您使用的是字典列表。按键排序:

mydict = 'carl':40,
          'alan':2,
          'bob':1,
          'danny':3

for key in sorted(mydict.iterkeys()):
    print "%s: %s" % (key, mydict[key])

alan: 2
bob: 1
carl: 40
danny: 3

如果您想按值对字典进行排序,请参阅How do I sort a dictionary by value?

【讨论】:

您指的是哪个字典列表?问题中的代码有一个以元组为值的字典,根本没有列表。 当然你是对的。我犯了一个愚蠢的错误。【参考方案2】:

字典不能这样排序,但您可以对其内容进行排序:

sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2)
sorted(a_dict.items(), key=lambda item: item[1][1])    # Python 3

您可以将结果放入collections.OrderedDict(从 2.7 开始):

OrderedDict(sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2))
OrderedDict(sorted(a_dict.items(), key=lambda item: item[1][1])    # Python 3

【讨论】:

在您的 lambda 中完成的参数解包仅适用于 Python 2.x。在 Python 3 中,您需要执行 key=lambda k, v : v[1]

以上是关于如何按值对 Python 字典进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

按值对字典进行排序[重复]

当每个字典都有不同的键时,如何按值对字典列表进行排序?

在 JavaScript 中按值对字典进行排序

使用类提供的排序键按值对字典进行排序

如何使用 R ggplot 按值对条形图进行排序? [复制]

如何按值对计数器进行排序? - Python