Python:index()调用时的变异列表值?

2024-09-27 23:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表词典,一个列表列表和一个词典框架。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]]}

Tags: keyin框架密码列表for数量index
1条回答
网友
1楼 · 发布于 2024-09-27 23:28:36

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

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

相关问题 更多 >

    热门问题