Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python heapq.nsmallest在嵌套字典最里面的值上_Python_Python 3.x_Dictionary - Fatal编程技术网

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,…)