我有一个列表词典,一个列表列表和一个词典框架。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
仍然完好无损。现在我想用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)
,因为您的列表是嵌套的,所以(可能)需要深度复制所有列表相关问题 更多 >
编程相关推荐