我只想在字典中更新1个字典值,但它似乎更新了2个键的并集:
Y = dict(zip(['A', 'B'], [dict.fromkeys(range(2010,2014), [])] * 2))
zz = {'A':{2012: [(666,999)], 2013: []}, 'B':{2010:[], 2011:[(666,999)]}}
Y['A'][2012] = zz['A'][2012]
结果:
{'A': {2010: [], 2011: [], 2012: [(666, 999)], 2013: []}, 'B': {2010: [], 2011: [], 2012: [(666, 999)], 2013: []}}
我只想更新2012年的'A'。
我是初学python程序员。
由于
答案 0 :(得分:2)
这部分:
[dict.fromkeys(range(2010,2014), [])] * 2
创建一个列表,其中两个元素都是相同的dict对象。此外,在该单个字典中,所有4个值都是相同的列表对象。
这部分:
Y['A'][2012] = zz['A'][2012]
获取存储在zz['A'][2012]
中的列表对象,并使Y['A'][2012]
也引用该列表。
您可以通过执行以下操作,使用独立列表制作独立的词组:
Y = {key1: {key2: [] for key2 in range(2010, 2014)} for key1 in ['A', 'B']}
由于我不确定您要对Y['A'][2012] = zz['A'][2012]
做什么,我无法在那里提供解决方案。
答案 1 :(得分:0)
此:
[dict.fromkeys(range(2010,2014), [])] * 2
创建两个相同的词典,而不是两个相同词典的副本。因此,Y['A'][2012]
与Y['B'][2012]
相同。
您可以通过执行以下操作来解决此问题:
y = dict(zip(['A', 'B'], [dict.fromkeys(range(2010,2014), []) for _ in [_,_]]))
相关:
List of lists changes reflected across sublists unexpectedly
Generating sublists using multiplication ( * ) unexpected behavior