heapq.nsmallest在嵌套字典最里面的值上

时间:2017-11-03 18:41:06

标签: python python-3.x dictionary

我有一张表格

myNestedDict=collections.defaultdict(dict)

示例数据:

{'509582':{'509533': 65.499}, 
 '509583':{'509534': -35.499},{'509568': -325.499},
 '509584':{'509576': 0},{'509576': -1337} }

我试图让它返回与每个最小n个值相关联的两个键。

所以对于这个例子,如果我正在寻找2个最小的:heapq.nsmallest(2,myNestedDict,key = ???)

我想返回字典:

{'509584':{'509576': -1337},
'509583':{'509568': -325.499} }

或者,我实际上不再需要该值,因此如果更容易,它可以返回非嵌套字典:

{'509584':'509576',
'509583':'509568'}

正如您所看到的,我无法找出heapq.nsmallest的正确密钥设计来对最里面的值进行排序。任何帮助非常感谢。感谢

注意 - 这本词典有数百万条记录,因此效率很重要。

编辑 - 这就是我实际运行的东西,但它只在第一个键上排序,我需要对最里面的值进行排序。请注意,他们说itemgetter对于这个数百万字典的字典来说比lambda更快

heapq.nsmallest(2,myNestedDict.items(),key = itemgetter(0))

1 个答案:

答案 0 :(得分:0)

我通过使用列表推导将我的嵌套字典转换为元组列表然后使用heapq.nsmallest(2,myTupleList,key = itemgetter(2))来解决这个问题。

性能是可管理的,因为将字典转换为100万行示例的列表只需0.5秒。