如果defaultdict(dict)
将两个键都作为字符串并且它们的值为float,那么如何根据整个defaultdict中值的降序找到k键。
我可以编写2个循环并轻松存储100对的列表,如果在n ^ 2次中找到超过exisitng值的东西,则用新条目替换列表。但是,在Python中是否有正确的方法。
示例文件
defaultdict(<type 'dict'>, {u'just': {u'don': 24.163775416342308, u'like': 28.68171888897304, u'make': 21.69210433035232},'like':{'just':28.68171888897304,'don':12.34, 'mike':27.675}}
期望的输出(假设我只需要整个集合中的前三个值)
just,like, 28.68171
like,mike, 27.675
just,don, 24.16377
答案 0 :(得分:2)
每当您提取最大值和最小值时,heapq.nlargest和heapq.nsmallest函数都是您最好的新朋友:
>>> from heapq import nlargest
>>> from operator import itemgetter
>>> from pprint import pprint
>>> d = defaultdict(dict,
{'just': {'don': 24.163775416342308,
'like': 28.68171888897304,
'make': 21.69210433035232},
'like': {'don': 12.34,
'just': 28.68171888897304,
'mike': 27.675}})
>>> flattened = ((outerkey, innerkey, value) for outerkey, innerdict in d.items()
for innerkey, value in innerdict.items())
>>> result = nlargest(3, flattened, key=itemgetter(2))
>>> pprint(result)
[('just', 'like', 28.68171888897304),
('like', 'just', 28.68171888897304),
('like', 'mike', 27.675)]
在Python 2中,使用iteritems()
代替items()
会更节省空间。