Python 有条件地合并多个词典

Python 有条件地合并多个词典,python,dictionary,Python,Dictionary,我有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 max_dict={} 对于原始目录列表中的目

我有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
max_dict={}
对于原始目录列表中的目录:
对于键,dict.iteritems()中的val:
如果键不在max_dict或max_dict[键]
是否有更好(或更“pythonic”)的方法来实现这一点?

相反,它们支持本地“合并”计数:

from collections import Counter

max_dict = Counter()
for d in original_dict_list:
    max_dict |= Counter(d)
甚至:

from collections import Counter
from operator import or_

max_dict = reduce(or_, map(Counter, original_dict_list))
计数器
对象是多组的(有时也称为“行李”)。
|
运算符对两个计数器执行并集,存储给定键的最大计数

计数器
也是
dict
的一个直接子类,因此您可以(大多数情况下)将其视为任何其他字典

演示:


假设并非所有字典都包含所有键:

keys = set(k for x in original_dict_list for k in x)
max_dict = {k:max([x[k] for x in original_dict_list if k in x]) for k in keys}

在这个特定的实例中,您可以使用
x[k]
而不是
x.get(k,-1)
,因为字典都使用相同的键。但是,如果他们没有这样做,我建议用
[x[k]代替原来的目录列表中的x,如果k在x中的话]
keys = set(k for x in original_dict_list for k in x)
max_dict = {k:max([x[k] for x in original_dict_list if k in x]) for k in keys}
max_dict = { k:max([v]+[ _dict[k] for _dict in original_dict_list[1:] ])
             for k,v in original_dict_list[0].items() }