Python:index()调用时的Mutated List值?

时间:2016-07-15 02:31:19

标签: python list dictionary indexing

我有一个列表字典,一个列表列表和一个字典框架。 p中的每个键都不包含相同数量的列表,也不包含相同的顺序。我想在q中标准化字典。为了最初填充q

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仍然完好无损。现在,我想使用q中的值填充p中的相应列表。这是我的代码:

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]]}

1 个答案:

答案 0 :(得分:1)

在循环中执行q[key] = ol2时,将所有键设置为相同的值,即ol2。不是ol2的副本。它们都是相同的列表。因此,当您稍后修改q[key]时,您将修改所有值(以及ol2)。

如果您想将每个值设置为ol2的单独副本,则必须import copy使用q[key] = copy.deepcopy(ol2),因为您的列表是嵌套的,因此您(可能)需要深度复制所有列表。