【发布时间】:2013-05-20 11:08:13
【问题描述】:
我有一本这种结构的设置字典:
main_dict = {
'a': {
'a1': 1,
'a2': 2,
},
'b': {
'bb': {
'bb1' : 1,
'bb2' : 2,
},
},
}
然后我有一些类包含对 main_dict 中包含的字典的引用,例如:
class B:
def __init__(self, settings):
self.settings = settings
my_b = B(main_dict['b'])
assert(my_b.settings is main_dict['b'])
所以我可以更新main_dict 中的不可变值,这些更新将反映在my_b 中,因为my_b.settings is main_dict['b']。
但是,我现在有一个新的根字典,其中包含新的设置,结构相同:
new_dict = {
'a': {
'a1': 11,
'a2': 22,
},
'b': {
'bb': {
'bb1' : 11,
'bb2' : 22,
},
},
}
是否有一种简单且通用的方法可以将new_dict 中的所有不可变值复制到main_dict 中,从而使 my_b 中的引用保持不变?
【问题讨论】:
-
@MartijnPieters,我很确定他想确保字典完全一样。就像通过引用而不是按值传递一样
-
@TehTris:不,OP 想要将所有嵌套字典值复制到现有字典中。您可以通过递归更新来做到这一点,如另一个问题所示。
-
形状(对象图中字典的出现次数,以及所有字典键的集合)是否相同?
-
虽然我的问题比那个问题稍微笼统一些(我关心的是保留确切的实例以及防止
main_dict中的值丢失,而new_dict中没有),我认为给出的答案非常接近这里所需要的。感谢您找到它。 -
@delnan 不总是,不。我们可能会加载一个不完整的设置文件,在这种情况下,
main_dict中的某些元素将保持未更新。 (我们也可能在new_dict中有额外的数据,这些数据将被插入到main_dict
标签: python dictionary immutability