我有一本字典:
d = {'a':[1,3], 'b':[3,4,5,6], 'c':[1], 'd':[1,2,3] }
我想创建一个较小的新词典,其中包含前两个键:值对,按值列表的len
排序。所以在这种情况下,我想:
newd = {'b':[3,4,5,6], 'd':[1,2,3] }
我尝试了this answer,但收到了这个错误:
NameError: global name 'd' is not defined
答案 0 :(得分:4)
一种方法是根据值的长度对项目进行排序,然后从最后两项创建一个字典。
sorted_items = sorted(d.items(), key = lambda item : len(item[1]))
newd = dict(sorted_items[-2:])
答案 1 :(得分:2)
似乎是heapq
的工作:
big_items = heapq.nlargest(2, d.items(), key=lambda x: len(x[1]))
newd = dict(big_items)
heapq
优于sorted
的优点是,这提供了O(N)时间复杂度,而sorted
将产生O(NlogN)时间复杂度。对于小型词,这可能并不重要。由于更优化的实施,sorted
甚至可能更快,但对于大的替代品,这实际上可能会为您带来显着的加速。
(在python2.x上,您可以使用d.iteritems()
代替d.items()
)