Python中的动态自引用字典

时间:2013-11-22 22:16:35

标签: python dictionary data-structures multiprocessing

我在制作引用同一字典的其他部分的词典时看到了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

1 个答案:

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