我试图使用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):
在需要时,但我宁愿预先对dict进行排序。
答案 0 :(得分:3)
你可以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])])