gpt4 book ai didi

Python 3 正在将元素添加到列表中,而不管 dict 中使用的键是什么

转载 作者:行者123 更新时间:2023-11-30 22:12:45 25 4
gpt4 key购买 nike

我有一个定义的字典:

keys = ['Valid', 'Reverse']
NOC = dict.fromkeys(keys, [])

然后,我迭代一个文件,并根据行中的元素,根据行中的值将它们添加到该字典中的不同列表中

这是列表理解中循环阅读器内容的代码:

if item[0] == '4':
if float(item[10]) < 0:
state = 'Reverse'
print(state)
NOC[state].append(item[6]+"FOOOO")
if float(item[10]) >= 0:
state = 'Valid'
print(state)
NOC[state].append(item[6])

print (NOC['Reverse'])

如您所见,我在“Reverse”的情况下添加了字符串“FOOOO”。我这样做是为了查看字典中的列表内部发生了什么。

我已经验证 if-then 语句都正常工作。

但是,附加似乎写入内存中的同一位置。真奇怪。以下是列表理解循环文件内容的一些输出:

Valid
['68382011714']
Valid
['68382011714', '69315013701']
Valid
['68382011714', '69315013701', '16729018201']
Valid
['68382011714', '69315013701', '16729018201', '54458098010']
Valid
['68382011714', '69315013701', '16729018201', '54458098010', '61570007301']
Valid
['68382011714', '69315013701', '16729018201', '54458098010', '61570007301', '61570007301']
Reverse
['68382011714', '69315013701', '16729018201', '54458098010', '61570007301', '61570007301', '61570007301FOOOO']

对于我来说, print(NOC['Reverse']) 显示的值除了附加“FOOOO”之外还有其他值,这是没有意义的。为什么会发生这种情况?

最佳答案

您仅创建一个列表:

NOC = dict.fromkeys(keys, [])

它被分配给NOC的每个键。由于键指向相同的列表,因此无论您使用什么键,您都会得到相同的列表,因此您将修改相同的列表。您可以使用以下方法轻松测试:

assert NOC["Valid"] is not NOC["Reverse"], "It's the same list!"

不要这样做,而是确保每个键都有自己的列表:

NOC = {k: [] for k in keys}

关于Python 3 正在将元素添加到列表中,而不管 dict 中使用的键是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50997898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com