尝试从csv文件读取到字典时发生Python错误

2024-05-16 03:47:37 发布

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

我正在尝试从csv文件读入字典。问题是,我每行有3个值(不仅仅是2个值),并希望转换为dict,其中第一个值是键,最后两个值组合为一个值(例如,使用列表或元组)。例如,我在csv中有以下内容:

Calcium Enriched 100% Lactose Free Fat Free Milk,2346,57876.0

Large Organic Omega3 Brown Eggs,2568,86280.0

Roasted & Salted Shelled Pistachios,919,29358.0

Chocolate Peanut Butter Protein Bar,801,21296.0

我希望输出是这样的:

{'Calcium Enriched 100% Lactose Free Fat Free Milk': [2346,57876.0]}

{'Large Organic Omega3 Brown Eggs': [2568,86280.0]}

{'Roasted & Salted Shelled Pistachios': [919,29358.0]}

{'Chocolate Peanut Butter Protein Bar': [801,21296.0]}

我试着用正常的方式来做:

with open('avg_prod_reorder_time.csv', 'r', encoding='utf-8') as csv_file:
    reader = csv.reader(csv_file)
    avg_prod_reorder_time = dict(reader)

但我得到以下错误:

ValueError: dictionary update sequence element #0 has length 3; 2 is required

如何解决这个问题?谢谢


Tags: csvfreefateggsdictreaderlargemilk
3条回答

你不必使用csv。只需逐行读取文件并将其拆分

with open("data.csv", 'r') as f:
    for line in f:
        key, *value = line.rstrip("\n").split(',')
        result = {key: list(value)}

假设你有这样一个csv文件

一些.csv文件

Hello ,1,2
There ,2,3
Friend ,4,5

你可以试试这个

import csv
mydict = {}
with open("some.csv","r+") as c:
    r = csv.reader(c)
    for row in r:
        mydict[row[0]] = row[1:]
print(mydict)

输出:

{'Friend ': ['4', '5'], 'Hello ': ['1', '2'], 'There ': ['2', '3']}

解释:

这是你感兴趣的部分

r = csv.reader(c)
for row in r:
    mydict[row[0]] = row[1:]

我们在分配

mydict[row[0]]row[1:]

也就是第一个

mydict['Hello']row[1:][1,2]列表切片

其他线路也一样

注意:

列表切片是指基于索引对列表进行切片, 如果你不知道的话,试试这个。一般形式是这样的

你的清单[start:stop]

注意开始是包含的停止是独占的

>>> a = [1,2,3,4]
>>> a[0]
1
>>> a[1:]
[2, 3, 4]
>>> a[2:]
[3, 4]
>>> a[3:]
[4]
>>> a[:2]
[1, 2]
>>> a[:3]
[1, 2, 3]
>>> a[:1]
[1]

这将根据需要创建dict:

avg_prod_reorder_time = {r[0]: r[1:] for r in reader if r}

dict由键/值对组成,但您的数据不是成对格式化的。上面的代码将第一个元素作为键,并形成所有剩余元素的列表。条件if r跳过空行

相关问题 更多 >