我正在寻找一种方法来创建字典的多个临时副本以保存一些“进化状态”,只有轻微的代际偏差,并找到了这个小原型字典:
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
基本上我想要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)
等等。
我想知道,如果这门课的作者和我遗漏了什么,因为我无法想象,没有标准库方法可以解决这个问题。但无论是集合还是 itertools 似乎都没有提供类似的简单方法。
像这样的事情可以用 itertools.tee 完成吗?
更新:这不是复制和更新的问题,因为这正是这个 ptdict 正在做的事情。但是使用 update 不会返回 dict,而 ptdict 会返回,因此我可以例如链接结果或进行就地测试,这将大大提高可读性。(我提供的示例可能有点微不足道,但我不想与大矩阵混淆。)
我为不够精确而道歉。也许下面的例子说明了为什么我有兴趣使用一个复制/更新步骤来获取字典:
nextgen = nextgen.mutate(inject_mutagen("A")) if nextgen.mutate(inject_mutagen("A")).get("alive") else nextgen.mutate(inject_mutagen("C"))