如何在python中创建覆盖superdictionary的子字典

如何在python中创建覆盖superdictionary的子字典,python,dictionary,types,Python,Dictionary,Types,我想从另一本字典创建一本字典,在某种程度上,如果我编辑较小的字典,它会自动编辑较大的字典 >>> d = {'v1':1,'v2':3,'v4':2} >>> d2 = {k:d[k] for k in ['v1','v4']} >>> d2['v1'] = 3 >>> print(d.items()) dict_items([('v1', 1), ('v2', 3), ('v4', 2)]) 预期结果: > dic

我想从另一本字典创建一本字典,在某种程度上,如果我编辑较小的字典,它会自动编辑较大的字典

>>> d = {'v1':1,'v2':3,'v4':2}
>>> d2 = {k:d[k] for k in ['v1','v4']}
>>> d2['v1'] = 3
>>> print(d.items())
dict_items([('v1', 1), ('v2', 3), ('v4', 2)])
预期结果:

> dict_items([('v1', 3), ('v2', 3), ('v4', 2)])

您可以子类化
dict
(或
collections.abc.Mapping
)将子词典链接到superdictionary(下面称为
base
):

然后,您可以通过以下方式使用它来获得示例的结果:

>>> d = {'v1':1,'v2':3,'v4':2}
>>> d2 = subdict({k:d[k] for k in ['v1','v4']}, base=d)
>>> d2['v1'] = 3
>>> print(d.items())
dict_items([('v1', 3), ('v2', 3), ('v4', 2)])

一种方法是使用
update()


但是你必须确保你每次更改
d
时都会更新
d2

d.update(d2)
应该根据
d
更新
d
。你可以创建一个函数来自动更新,而不是每次都使用
d.update
。如果你想的话,我也会发布。好的,
d2
更小,构造方式与OP示例中的相同。注释是针对您发布的上一个答案
d2=d
。无论如何,删除评论。干杯
>>> d = {'v1':1,'v2':3,'v4':2}
>>> d2 = subdict({k:d[k] for k in ['v1','v4']}, base=d)
>>> d2['v1'] = 3
>>> print(d.items())
dict_items([('v1', 3), ('v2', 3), ('v4', 2)])
>>> d = {'v1':1,'v2':3,'v4':2}
>>> d2 = {k:d[k] for k in ['v1','v4']}
>>> d2['v1'] = 3
>>> d.update(d2)
>>> print(d.items())
dict_items([('v1', 3), ('v2', 3), ('v4', 2)])