Я пытаюсь подкласс dict
изменить его метод update
.
Я ищу поведение, чтобы добавить значения общих ключей и сохранить уникальные.
Пример:
g1 = MyDict({1: 1, 2: 2})
g2 = MyDict({1: 1, 3: 3})
g1.update(g2) # should result in g1 = {1: 2, 2: 2, 3: 3}
# ^ because it is 1 from g1 + 1 from g2
другими словами, как если бы я делал:
from collections import Counter
g1 = dict(Counter(g1) + Counter(g2))
Для этой задачи я написал следующее:
class MyDict(dict):
def __update__(self, d2):
keys = set(self).union(d2)
self = {k: self.get(k, 0) + d2.get(k, 0) for k in keys}
return
но при выполнении:
g1 = MyDict({1: 1, 2: 2})
g2 = MyDict({1: 1, 3: 3})
g1.update(g2)
выдает:
{1: 1, 2: 2, 3: 3}
Однако, если я сделаю:
class MyDict(dict):
def __add__(self, d2):
keys = set(self).union(d2)
return {k: self.get(k, 0) + d2.get(k, 0) for k in keys}
, а затем
g1 = g1 + g2
реализовано желаемое поведение ..
Что я делаю не так, когда перезаписываю метод update
?