如何在 python 中创建一个覆盖超级词典的子字典



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

>>> 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(将子词典链接到超级词典(下面称为base(:

class subdict(dict):
def __init__(self, *args, base=None, **kwargs):
super().__init__(*args, **kwargs)
self.base = base
def __setitem__(self, key, value):
super().__setitem__(key, value)
if self.base:
self.base.__setitem__(key, value)

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

>>> 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 = {'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)])

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

最新更新