通过引用使字典理解 return

Make dict comprehension return by reference

问题:

有没有办法让上面的字典理解return通过引用?例如 extracted['a'] = 2 将导致 original['a'] = 2.

我不想涉及对 original 词典的更改。

你的预期目标(拥有一个字典,当更新时,它也会改变另一个字典)即使使用不可变的值也可以完成,如果你新字典是自定义类型,添加了所需的逻辑:

class MappedDict(dict):
    def __init__(self, orig, *args, **kwargs):
        self.__orig = orig
        dict.__init__(self, *args, **kwargs)
    def __setitem__(self, k, v):
        self.__orig[k] = v
        return dict.__setitem__(self, k, v)

d = {'a': 1, 'b': 2}
md = MappedDict(d, {k: v*2 for (k,v) in d.items()})
md['a']=5

...将使 dmd 都具有 'a' 的值 5,而 b 将不同(2 在前者和 4 在后者)。

不,理解 总是 return 一个浅拷贝(好吧,实际上它是一个包含对您迭代的值的引用的新对象)。然而,它只是一个浅表副本,因此如果您使用可变类型作为值并就地更改它们,更改将传播到原始对象。

>>> original = {'a':[], 'b':[]}
>>> extracted = {k:v for (k,v) in original.items() if k == 'a'}
>>> extracted['a'].append(1)  # change one value in extracted in-place
>>> original                  # original also changed
{'a': [1], 'b': []}
>>> extracted
{'a': [1]}