当它是一个不可变对象时,获取dict或list值的“引用”

时间:2016-01-30 01:57:39

标签: python

使用字典时,我发现自己想要迭代值并以某种方式更改它们。我一直在为myDict.keys()上的循环编写代码,然后对myDict['key']进行更改。特别是如果我需要对每次迭代中的值进行许多更改,我最终会输入大量详细的括号语法,以便一遍又一遍地在字典中获得相同的值。制作嵌套对象只会使问题变得更糟。即使值的类型是不可变的,对字典中的值进行“别名”或“引用”的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

只需将对象存储在变量中即可。它将引用存储在字典中的完全相同的值。

x = dictionary['nested']['keys']
# Do stuff with x

如果它是一个可变对象,您对x所做的任何更改都会影响字典中的值。如果它是不可变对象,则无论如何都无法进行任何更改,因此无关紧要。

如果您希望能够实际设置字典引用的不可变对象,但您不想继续引用字典键,则可以使用operator和{{ 3}}库动态生成getter和setter部分函数对象

from operator import getitem, setitem
from functools import partial

d = {'a': {'b': 1}}
getter = partial(getitem, d['a'], 'b')
setter = partial(setitem, d['a'], 'b')

print getter()
# 1
setter(2)
print d
# {'a': {'b': 2}}