按值的长度对字典进行排序

时间:2013-12-09 06:19:34

标签: python sorting dictionary

我有一本字典:

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

2 个答案:

答案 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()

相关问题