【问题标题】:From a defaultdict, find the pair of keys with highest values从 defaultdict 中,找到具有最高值的键对
【发布时间】:2016-10-04 13:35:13
【问题描述】:

给定一个defaultdict(dict),其中两个键都是字符串并且它们的值是浮点数,那么我如何根据整个defaultdict中值的降序找到k个键。

我可以编写 2 个循环并简单地存储 100 对的列表,如果在 n^2 次中找到超过现有值的东西,则用新条目替换列表。但是,在 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}}

期望的输出(假设我只需要整个集合中的前 3 个有价值的条目)

just,like, 28.68171
like,mike, 27.675
just,don, 24.16377

【问题讨论】:

  • 你可以为给定的例子发布你想要的输出吗?
  • @MaxU - 请立即查看

标签: python collections defaultdict


【解决方案1】:

当您提取最大值和最小值时,heapq.nlargestheapq.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() 会更节省空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多