Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何组合多个defaultdict(计数器)?_Python_Merge_Counter_Addition_Defaultdict - Fatal编程技术网

Python 如何组合多个defaultdict(计数器)?

Python 如何组合多个defaultdict(计数器)?,python,merge,counter,addition,defaultdict,Python,Merge,Counter,Addition,Defaultdict,如何组合多个defaultdict(计数器) 考虑到我有两个defaultdict(Counter),我尝试了以下方法,它是有效的,但是有没有其他方法来实现组合 >>> from collections import Counter, defaultdict >>> x = {'a':Counter(['abc','def','abc']), 'b':Counter(['ghi', 'jkl'])} >>> y = {'a':Counter(

如何组合多个
defaultdict(计数器)

考虑到我有两个
defaultdict(Counter)
,我尝试了以下方法,它是有效的,但是有没有其他方法来实现组合

>>> from collections import Counter, defaultdict
>>> x = {'a':Counter(['abc','def','abc']), 'b':Counter(['ghi', 'jkl'])}
>>> y = {'a':Counter(['abc','def','mno']), 'c':Counter(['lmn', 'jkl'])}
>>> z = x+y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
>>> z = defaultdict(Counter)
>>> for i in x:
...     z[i].update(x[i])
... 
>>> for i in y:
...     z[i].update(y[i])
... 
>>> z
defaultdict(<class 'collections.Counter'>, {'a': Counter({'abc': 3, 'def': 2, 'mno': 1}), 'c': Counter({'jkl': 1, 'lmn': 1}), 'b': Counter({'jkl': 1, 'ghi': 1})})
>>来自集合导入计数器,defaultdict
>>>x={'a':计数器(['abc','def','abc']),'b':计数器(['ghi','jkl'])
>>>y={'a':计数器(['abc','def','mno']),'c':计数器(['lmn','jkl'])
>>>z=x+y
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:不支持+:“dict”和“dict”的操作数类型
>>>z=默认DICT(计数器)
>>>对于x中的i:
...     z[i]。更新(x[i])
... 
>>>对于y中的i:
...     z[i]。更新(y[i])
... 
>>>z
defaultdict(,{'a':计数器({'abc':3,'def':2,'mno':1}),'c':计数器({'jkl':1,'lmn':1}),'b':计数器({'jkl':1,'ghi':1})

这似乎没问题,如果有一点代码高尔菲:

{k:(x.get(k,Counter()) + y.get(k,Counter())) for k in (x.keys()+y.keys())}
Out[23]: 
{'a': Counter({'abc': 3, 'def': 2, 'mno': 1}),
 'b': Counter({'jkl': 1, 'ghi': 1}),
 'c': Counter({'jkl': 1, 'lmn': 1})}
如果您想坚持使用
defaultdict
输出,可以使用
itertools.chain
将事情简化为一个循环:

z = defaultdict(Counter)

for k,v in chain(x.iteritems(), y.iteritems()):
    z[k].update(v)

这似乎没问题,如果有一点代码高尔菲:

{k:(x.get(k,Counter()) + y.get(k,Counter())) for k in (x.keys()+y.keys())}
Out[23]: 
{'a': Counter({'abc': 3, 'def': 2, 'mno': 1}),
 'b': Counter({'jkl': 1, 'ghi': 1}),
 'c': Counter({'jkl': 1, 'lmn': 1})}
如果您想坚持使用
defaultdict
输出,可以使用
itertools.chain
将事情简化为一个循环:

z = defaultdict(Counter)

for k,v in chain(x.iteritems(), y.iteritems()):
    z[k].update(v)