Python heapq.nsmallest在嵌套字典最里面的值上
我有一本形式词典Python heapq.nsmallest在嵌套字典最里面的值上,python,python-3.x,dictionary,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,myNe
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.nsmalest找到一个合适的键设计,以便根据最里面的值进行排序。非常感谢您的帮助。谢谢
注意-这本词典有数百万条记录,因此效率很重要
编辑-这里就是我实际运行的,但是它只在第一个键上排序,我需要在最里面的值上排序。注意,他们说itemgetter比lambda更快地用于这个数百万大小的字典
heapq.nsmallest(2,myNestedDict.items(),key=itemgetter(0))我通过使用列表理解将嵌套字典转换为元组列表,然后使用heapq.nsmallest(2,myTupleList,key=itemgetter(2))解决了这个问题
性能是可管理的,因为将100万行示例的字典转换为列表只需0.5秒。类似于
key=lambda k:min(myNestedDict[k].values())
?Bakuriu,我得到:unhabable类型:“dict”您的示例数据现在甚至在语法上都不是有效的字典。Scott,我正在尝试更正它。您如何调用该函数?我希望使用字典键作为参数调用key
函数,但它似乎最终得到了值,这表明您使用的是nsmallest(2,myNestedDict.values(),…)
而不是nsmallest(2,myNestedDict,…)
。