【问题标题】:How to sort a Python dictionary by value? [duplicate]如何按值对 Python 字典进行排序? [复制]
【发布时间】: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:这是一个字典列表,这只是一个字典,不在列表中。

标签: python sorting


【解决方案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]
猜你喜欢
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2013-03-14
  • 2020-08-03
  • 2012-08-11
  • 2010-10-11
相关资源
最近更新 更多