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