获取字典列表的最大键

use*_*823 4 python dictionary list

如果我有:

dicts = [{'a': 4,'b': 7,'c': 9}, 
         {'a': 2,'b': 1,'c': 10}, 
         {'a': 11,'b': 3,'c': 2}]
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得最大键,如下所示:

{'a': 11,'c': 10,'b': 7}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

改为使用collection.Counter()对象,或转换字典:

from collections import Counter

result = Counter()
for d in dicts:
    result |= Counter(d)
Run Code Online (Sandbox Code Playgroud)

甚至:

from collections import Counter
from operator import or_

result = reduce(or_, map(Counter, dicts), Counter())
Run Code Online (Sandbox Code Playgroud)

Counter对象支持通过|操作本机查找每个键的最大值; &给你最小的.

演示:

>>> result = Counter()
>>> for d in dicts:
...     result |= Counter(d)
... 
>>> result
Counter({'a': 11, 'c': 10, 'b': 7})
Run Code Online (Sandbox Code Playgroud)

或使用reduce()版本:

>>> reduce(or_, map(Counter, dicts), Counter())
Counter({'a': 11, 'c': 10, 'b': 7})
Run Code Online (Sandbox Code Playgroud)


Jar*_*red 5

>>> dicts = [{'a': 4,'b': 7,'c': 9}, 
...          {'a': 2,'b': 1,'c': 10}, 
...          {'a': 11,'b': 3,'c': 2}]
>>> {letter: max(d[letter] for d in dicts) for letter in dicts[0]}
{'a': 11, 'c': 10, 'b': 7}
Run Code Online (Sandbox Code Playgroud)