我有N个字典,包含相同的键,值为整数.我想根据最大值将这些合并到一个字典中.目前我有这样的事情:
max_dict = {}
for dict in original_dict_list:
for key, val in dict.iteritems():
if key not in max_dict or max_dict[key] < val:
max_dict[key] = val
Run Code Online (Sandbox Code Playgroud)
有没有更好的(或更"pythonic")方式这样做?
使用collection.Counter()对象,它们本身支持"合并"计数:
from collections import Counter
max_dict = Counter()
for d in original_dict_list:
max_dict |= Counter(d)
Run Code Online (Sandbox Code Playgroud)
甚至:
from collections import Counter
from operator import or_
max_dict = reduce(or_, map(Counter, original_dict_list))
Run Code Online (Sandbox Code Playgroud)
Counter对象是多组的(有时也称为"包").该|运营商对两个计数器进行联合,存储最大计数对于给定的关键.
A Counter也是一个直接的子类dict,所以你可以(大多数)像对待任何其他字典一样对待它.
演示:
>>> from collections import Counter
>>> from operator import or_
>>> original_dict_list = [{'foo': 3, 'bar': 10}, {'foo': 42, 'spam': 20}, {'bar': 5, 'ham': 10}]
>>> reduce(or_, map(Counter, original_dict_list))
Counter({'foo': 42, 'spam': 20, 'bar': 10, 'ham': 10})
Run Code Online (Sandbox Code Playgroud)