python - 在内部嵌套的 defaultdict 中查找值总和的最大值

标签 python sum max counter defaultdict

给定一个 defaultdict(Counter):

from collections import defaultdict, Counter

from collections import defaultdict, Counter

x = {('a', 'z'): Counter({'crazy': 1, 'lazy': 1}),
     ('b', 'r'): Counter({'brown': 1}),
     ('d', 'o'): Counter({'dog': 1}),
     ('e', 'r'): Counter({'over': 1}),
     ('f', 'o'): Counter({'fox': 1}),
     ('h', 'e'): Counter({'the': 2}),
     ('j', 'u'): Counter({'jumps': 1}),
     ('l', 'a'): Counter({'lazy': 1}),
     ('m', 'p'): Counter({'jumps': 1}),
     ('o', 'g'): Counter({'dog': 1}),
     ('o', 'v'): Counter({'over': 1}),
     ('o', 'w'): Counter({'brown': 1}),
     ('o', 'x'): Counter({'fox': 1}),
     ('p', 's'): Counter({'jumps': 1}),
     ('r', 'o'): Counter({'brown': 1}),
     ('t', 'h'): Counter({'the': 2}),
     ('u', 'm'): Counter({'jumps': 1}),
     ('v', 'e'): Counter({'over': 1}),
     ('w', 'n'): Counter({'brown': 1}),
     ('z', 'y'): Counter({'crazy': 1, 'lazy': 1})}

我可以这样访问元组键中的值:

>>> x[('a', 'z')]
Counter({'crazy': 1, 'lazy': 1})

如果我想在内部字典中找到具有最高值和的元组键,即计数器,我可以这样做:

>>> max([(sum(x[ng].values()), ng) for ng in x])
(2, ('z', 'y'))
>>> max([(sum(x[ng].values()), ng) for ng in x])[1]
('z', 'y')

我认为获取最大值的步骤有点复杂。 是否有更直接的方法来获取内部嵌套 defaultdict 中值的总和的最大值?

注意尽可能不要从 x 重新创建另一个对象。此示例很小,但 x 对象的实际大小可以包含 1,000,000 个键,内部计数器的大小可能为 10,000,000。

最佳答案

您可以在迭代中捕获值以避免使用 [] 查找值,但它并没有那么清晰:

max((sum(c.values()), key) for key, c in x.items())

如果您只想返回 max 条目的键,您可以为 max 提供一个看起来不错的函数:

max(x, key=lambda k: sum(x[k].values()))

关于python - 在内部嵌套的 defaultdict 中查找值总和的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177722/

相关文章:

mysql - 如何更新每天具有最大值的行?

python - 在循环中使用字母表作为计数器

c# - 如何在 C# 中对两个字典中的值求和?

php - 加入其他表并在一个列中使用 group by 计算相同的 id

c - 如果没有 int/long 参数则不要打印出总和

sql - 将 Null 视为 Max

python - 获取元组字典中元组最大组件的键

python |从二维数组中提取元素

python - 在 Python 中获取代码点的 Unicode 版本

python - 在 Python 中字符串是不可变的,那么为什么在 Python 中允许覆盖操作?