gpt4 book ai didi

python - dict.setdefault 将一个额外的(默认?)项目附加到值列表中

转载 作者:行者123 更新时间:2023-11-28 22:38:06 26 4
gpt4 key购买 nike

我正在使用字典对 CSV 文件中的数据进行分组,因此例如第一列和第二列是字典键,值将是包含第 3,4 列的元组列表。

我的代码片段是:

import csv
import collections
csvDicData_ = dict()

fh = open('myfile.csv', 'rt')
reader = csv.reader(fh, delimiter=';', skipinitialspace=True)
for indx, row in enumerate(reader):
if row:
#-- put in a dictionary form: #csvDicData_[(row[0],row[1])] = (row[2],row[3])
key = (row[0],row[1])
value = (row[2],row[3])
#-- I'd like to use the row below (commented) insted of the next two, I expect the same result...
#csvDicData_.setdefault(key,[value]).append(value)

if (not key in csvDicData_): csvDicData_[key] = [value]
else: csvDicData_[key].append(value)

上面的代码产生了正确的结果,尽管我尝试使用 csvDicData_.setdefault(key,[value]).append(value) 并且出于某种我不明白的原因,len(csvDicData_[('field1x','field2x')] )) 总是有一个项目(具有预期的值 (0,0)。

为什么会出现这种行为(这就像 CSV 文件中每个键的第一行自动将元组 (0,0) 添加到字典/键中。

最佳答案

第一次做

csvDicData_.setdefault(key,[value]).append(value)

key 不会出现在字典中,因此将创建值为 [value] 的键。现在,setdefault 返回对应于 key 的值。因此,[value] 被返回,您正在将 value 附加到它。这就是为什么你总是得到一个额外的元素。

这应该只是

csvDicData_.setdefault(key, []).append(value)

现在,将返回空列表,您将向其附加 value


除此之外,您可能希望使用 with 语句打开文件,如下所示

with open('myfile.csv', 'rt') as fh:
reader = csv.reader(fh, delimiter=';', skipinitialspace=True)
for indx, row in enumerate(reader):
....

这样您就不必担心显式关闭文件。

关于python - dict.setdefault 将一个额外的(默认?)项目附加到值列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35918831/

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