dictOne = {'a':1, 'b':2}
dictTwo = {'aa':dictOne['a'], 'bb':dictOne['b']}
print(dictTwo['aa']
# returns 1
如果我对dictOne做出改变,如:
dictOne['a'] = 2
print(dictOne['a'])
# returns 2
但引用第一个dict的第二个dict仍返回原始值。
print(dictTwo['aa'])
# returns 1
这里发生了什么?我确信这在某种程度上是对dict的不当使用,但我需要立即解决这个问题。感谢。
答案 0 :(得分:0)
这一行:
dictTwo = {'aa':dictOne['a'], 'bb':dictOne['b']}
相当于:
dictTwo = {'aa':1, 'bb':2}
由于dictOne['a']
和dictOne['b']
都返回不可变值(整数),因此它们是通过复制传递的,而不是通过引用传递的。见How do I pass a variable by reference?
如果你完成dictTwo = dictOne
,更新dictOne
也会更新dictTwo
,但是它们会有相同的键值。
答案 1 :(得分:0)
您使用下面的代码从dictOne中的键'a'中提取值
dictTwo = {'aa':dictOne['a']}
您可能会在阅读python FAQ on pass by assignment
时发现一些价值在不了解问题的情况下,很难确切地说出如何解决这个问题。如果您需要在不同的键集之间创建映射,可以选择执行以下操作:
dictTwo = {'aa' : 'a', 'bb' : 'b'}
dictOne[dictTwo['aa']]
虽然您正在寻找的是multi key dict