例如,我有两个对象:
Ex(['d','c','d','a'])
Ex(['a','b','c','x','b','a'])
这些对象将产生以下字典:
{'d':2,'c':1,'a':1}
{'a':2,'b':2,'c':1,'x':1}
如何添加这两个字典对象以产生如下结果?
Ex(a [2],b [2],c [2],d [2],x [1])
Ex操作数都不应该更改。
所以我想出了以下代码:
def __add__(self, another):
r = self._val.copy()
for key, val in another._val.items():
if key in r:
r[key] += val
else:
r[key] = val
return r
但是这似乎无法正常工作,并且我必须通过自动检查程序来获取错误。
我必须使用dunder add,并且两个Ex对象都无法更改。
任何建议将不胜感激!
答案 0 :(得分:1)
使用Counter做类似的事情,并记住继承上的构成(或复合重用原理),因此使用counter时,您的Ex类dunder add应该看起来像这样:
from collections import Counter
class Ex:
def __init__(self, characters):
self.counter = Counter(characters)
def get_result(self):
return dict(self.counter.items())
def __add__(self, other):
if not isinstance(other, Ex):
return NotImplemented
result = Ex([])
result.counter = self.counter + other.counter
return result
ex_1 = Ex(['d', 'c', 'd', 'a'])
ex_2 = Ex(['a', 'b', 'c', 'x', 'b', 'a'])
ex_3 = ex_1 + ex_2
print(ex_1.get_result()) # {'d': 2, 'c': 1, 'a': 1}
print(ex_2.get_result()) # {'a': 2, 'b': 2, 'c': 1, 'x': 1}
print(ex_3.get_result()) # {'d': 2, 'c': 2, 'a': 3, 'b': 2, 'x': 1}
答案 1 :(得分:0)
如果您的目标是添加两个字典,则可以使用“更新” 例如dict1 = {'a':1,'b':2}和dict2 = {'a':2,'c':3},那么dict1.update(dict2)会将dict2的值更新为dict1。当您输出dict1时,它将输出{'a':2,'b':2,'c':3}