python:dict作为另一个dict的原型/模板标准库怎么解决这个问题?

2024-05-22 00:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来创建一个字典的多个临时副本来保存一些“进化状态”,只需稍微改变一下代际关系,我发现了这个小原型dict:

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。比如:

^{pr2}$

等等。在

我想知道,如果这个类的作者和我遗漏了什么,因为我无法想象,没有标准的库方法来处理这个问题。但集合和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"))

Tags: 方法selfif字典cloneargupdatedict
3条回答

我猜你在找这样的东西:

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

^{}

无需自定义类型,您可以立即执行此操作。只需使用dict,而不是:

nextgen = generations[-1].mutate(propertyB="Z", propertyC="NEW")

做这样的事情:

^{pr2}$

如果没有嵌套字典,也不需要深度复制而不是简单复制,那么这就足够了。在

复制模块包含浅拷贝和深拷贝功能。在

相关问题 更多 >