【问题标题】:Order a python dictionary by length of item using OrderedDict使用 OrderedDict 按项目长度对 python 字典进行排序
【发布时间】:2015-10-08 21:20:55
【问题描述】:

我正在尝试使用 OrderedDict 创建一个字典,其中项目是条目列表,并且我希望排序基于项目列表的长度。

说:

d = {2:[1], 1:[1,2,3], 4:[1,2], 5:[1,2,3,4]}

我试过了:

od = collections.OrderedDict(sorted(len(d.items())))

但我有一个TypeError: 'int' object is not iterable

我通过迭代这样的方法找到了解决方法:

for k in sorted(d, key=lambda k: len(d[k]), reverse=True): 

在需要时,但我宁愿事先对字典进行排序。

【问题讨论】:

  • 第一个 sorted 函数调用是错误的(第二个也是错误的,但原因不同) - 错误消息解释了原因。该错误与将其转回 OrderedDictionary 无关。将问题分解为多个部分,修复损坏的部分,然后使用/应用更正。
  • 你的意思是什么我宁愿事先对字典进行排序。

标签: python list dictionary sorted ordereddictionary


【解决方案1】:

你可以sort d.items() according to the length of the values:

In [268]: sorted(d.items(), key=lambda x: len(x[1]), reverse=True)
Out[268]: [(5, [1, 2, 3, 4]), (1, [1, 2, 3]), (4, [1, 2]), (2, [1])]

并将其传递给collections.OrderedDict:

In [267]: collections.OrderedDict(sorted(d.items(), key=lambda x: len(x[1]), reverse=True))
Out[267]: OrderedDict([(5, [1, 2, 3, 4]), (1, [1, 2, 3]), (4, [1, 2]), (2, [1])])

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2022-11-18
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多