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

时间:2017-04-03 06:20:51

标签: python sum max counter defaultdict

鉴于此public ArchifeContext db = new ArchifeContext(); public ActionResult Index() { return View(db.Books.ToList()); }

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})

我认为步骤有点令人费解以获得最大值。 是否有更简单的方法来获取内部嵌套defaultdict中值的最大值?

请注意尽可能不要从>>> 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') 重新创建另一个对象。此示例很小,但x对象的实际大小可以包含1,000,000个密钥,内部计数器的大小可以是10,000,000。

2 个答案:

答案 0 :(得分:3)

您可以捕获迭代中的值以避免使用[]查找值,但它不是那么清晰:

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

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

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

答案 1 :(得分:2)

[]是不需要的

print ( max((sum(x[ng].values()), ng) for ng in x)[1] )

使用.items()清理

print ( max((sum(v.values()), k) for k,v in x.items())[1] )

Max w / lambda version

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

map方法

print ( max(map(lambda ng: (sum(x[ng].values()), ng), x))[1] )