我在制作引用同一字典的其他部分的词典时看到了some SO questions,但每当首次创建字典时,它们似乎都是静态返回的。 有没有办法做到这一点并保持活力?
像这样:
# Lets just say we have a barn with lots of animals
# and the pigs always eat 2 chickens, so there has to always be 2 chickens per pig
def make_barn():
barn = {'pig': 0, 'cow': 0, 'chicken': 2*barn['pig']}
return barn
这样:
barn['pig'] = 3
print barn
将打印出来:
{'pig':3, 'chicken':6, 'cow':0}
我尝试使用lambda函数或类,但我试图将其作为一个巨大的字典来挑选,以便在multiprocessing
模块中的进程之间传递,并且该模块似乎不喜欢{{1 }或lambda
结构。
修改
我尝试使用多处理脚本中给出的答案,看起来它不可选:
class
答案 0 :(得分:3)
也许这样的事情?使用Python 2.7进行测试。
from UserDict import UserDict
class Barn(UserDict):
'''Barn automatically sets correct values for chickens.
TBD: What to do if chickens get changed?'''
def __init__(self, *args, **kw):
UserDict.__init__(self, *args, **kw)
pigs = self.data.get('pigs', None)
if pigs is not None:
self.data['chicken'] = pigs * 2
def __setitem__(self, name, value):
if name == 'pigs':
self.data['chicken'] = value * 2
self.data[name] = value
if __name__ == '__main__':
b = Barn(cows=1, pigs=2)
print b
b['pigs'] = 3
print b
运行它应该产生这样的东西:
{'cows': 1, 'chicken': 4, 'pigs': 2}
{'cows': 1, 'chicken': 6, 'pigs': 3}