python:dict作为另一个dict的原型/模板 - std.lib解决这个问题的方法?

Don*_*ion 1 python

我正在寻找一种方法来创建一个字典的多个临时副本来保存一些"进化状态",只有轻微的世代偏差,并发现这个小原型字典:

class ptdict(dict):
    def asprototype(self, arg=None, **kwargs):
        clone = self.__class__(self.copy())
        if isinstance(arg, (dict, ptdict)):
            clone.update(arg)
        clone.update(self.__class__(kwargs))        
        return clone
Run Code Online (Sandbox Code Playgroud)

基本上我想要smth.喜欢:

generation0 = dict(propertyA="X", propertyB="Y")
generations = [generation0]

while not endofevolution():
    # prev. generation = template for next generation:
    nextgen = generations[-1].mutate(propertyB="Z", propertyC="NEW")  
    generations.append(nextgen)
Run Code Online (Sandbox Code Playgroud)

等等.

我想知道,如果这个班级的作者和我错过了什么,因为我无法想象,没有标准库方法.但是收藏品和itertools似乎都没有提供类似的简单方法.

可以用itertools.tee完成这样的事情吗?

更新:这不是复制和更新的问题,因为,这正是这个ptdict正在做的事情.但是使用update不会返回dtd,ptdict会这样做,所以我可以举例说明链式结果或进行就地测试,这样可以提高可读性.(我提供的例子可能有点微不足道,但我不想与大矩阵混淆.)

我为不够精确而道歉.也许下面的例子澄清了为什么我有兴趣获得一个单一副本/更新步骤的字典:

nextgen = nextgen.mutate(inject_mutagen("A")) if nextgen.mutate(inject_mutagen("A")).get("alive") else nextgen.mutate(inject_mutagen("C"))
Run Code Online (Sandbox Code Playgroud)

geo*_*org 7

我想你正在寻找这样的东西:

first = {'x':1, 'y':100, 'foo':'bar'}
second = dict(first, x=2, y=200) # {'y': 200, 'x': 2, 'foo': 'bar'}
Run Code Online (Sandbox Code Playgroud)

看到 dict