如何使用__add__添加两个字典对象?

时间:2019-01-28 05:28:13

标签: python dictionary object add

例如,我有两个对象:

  

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对象都无法更改。

任何建议将不胜感激!

2 个答案:

答案 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}