Reputation: 116
I tried what was recommended here https://stackoverflow.com/a/41112823/5618523 but i am still having problems
class AppendiveDict(c.OrderedDict):
def __init__(self,func,*args):
self.func = func
c.OrderedDict.__init__(self,args)
def __setitem__(self, key, value,):
if key in self:
self[key] = self.func(self[key])
else:
c.OrderedDict.__setitem__(self,key,value)
a = AppendiveDict((lambda y: y + "sdf"),("a","b"),("c","d"),("e","f"),("a","b"))
a
the point of this class is that it is suppose to apply a function for items already in dict when it reencounters the item.
1
RecursionError Traceback (most recent call last)
<ipython-input-15-b4bd349c86bf> in <module>()
11 else:
12 c.OrderedDict.__setitem__(self,key,value)
---> 13 a = AppendiveDict((lambda y: y + "sdf"),("a","b"),("c","d"),("e","f"),("a","b"))
14 a
2
<ipython-input-15-b4bd349c86bf> in __init__(self, func, *args)
5 def __init__(self,func,*args):
6 self.func = func
----> 7 c.OrderedDict.__init__(self,args)
8 def __setitem__(self, key, value,):
9 if key in self:
3
<ipython-input-15-b4bd349c86bf> in __setitem__(self, key, value)
8 def __setitem__(self, key, value,):
9 if key in self:
---> 10 self[key] = self.func(self[key])
11 else:
12 c.OrderedDict.__setitem__(self,key,value)
number 3 just repeats .if i put self.func after c.OrderedDict.init(self,args) it causes an attribute error saying self.func doesn't exist.
Upvotes: 0
Views: 124
Reputation: 5805
because self[key]
calls __setitem__
again, you can try:
def __setitem__(self, key, value,):
if key in self:
c.OrderedDict.__setitem__(self, key, self.func(value))
edit: Although re-reading, you intended to modify the current set value:
def __setitem__(self, key, value):
if key in self:
c.OrderedDict.__setitem__(self, key, self.func(self[key]))
works too, if that is what you are after.
Upvotes: 2