我想从另一个词典创建一个词典,在某种程度上,如果我编辑较小的词典,它会自动编辑较大的词典
>>> 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
。