Python:Index()调用时的突变列表值?
问题描述:
我有一个列表字典,一个列表和一个字典框架。 p
中的每个键不包含相同数量的列表,也不以相同的顺序。我想在q
中标准化字典。为了最初填充q
:Python:Index()调用时的突变列表值?
p = {'GET25' : [['20151231', 57000], ['20150930', 135000]],
'ABC10' : [['20151231', 10000], ['20150930', 195000]]}
ol2 = [['20160331', 0], ['20151231', 0], ['20150930', 0]]
q = {}
for key in p:
q[key] = ol2
离开这个框架:
q = {'GET25' : [['20160331', 0], ['20151231', 0], ['20150930', 0]],
'ABC10' : [['20160331', 0], ['20151231', 0], ['20150930', 0]]}
在这一点上,ol2
仍然完好无损。现在我想用p
中的值填充q
中的适当列表。这是我的代码:
for key in p:
for each in p[key]:
q[key][ol2.index([each[0], 0])][1] = each[1]
我以为这段代码是应该做的是:返回列表ol2
的“季末日期”的索引,那么在q
的价值p
设定值在相应的位置。但是,最终返回Value Error
:['20151231', 0] is not in list
。当我print(ol2)
,我发现我的名单已突变:
>>>print(ol2)
[['20160331', 0], ['20151231', 10000], ['20150930', 195000]]
我真的不知道我重置值ol2
或如何预防。谢谢您的帮助。
编辑:
在回答关于这个职位的问题,我需要的输出将是:
q = {'GET25' : [['20160331', 0], ['20151231', 57000], ['20150930', 135000]],
'ABC10' : [['20160331', 0], ['20151231', 10000], ['20150930', 195000]]}
答
当您在循环做q[key] = ol2
,你将所有键设置为相同的值,即ol2
。不是ol2
的副本。他们都是一样的名单。因此,稍后修改q[key]
时,您将修改所有值(以及ol2
)。
如果你想每个值设置为ol2
单独副本,你将不得不使用import copy
q[key] = copy.deepcopy(ol2)
,因为你的列表嵌套,所以你(大概)需要深复制所有的列表。
你能否在你的问题中解释你的期望输出是什么? – Robin