我正在尝试从csv文件读取字典。问题是我每行有3个值(不仅仅是2个)并且想要转换为dict,其中第一个值是键,最后2个值组合成单个值(例如使用列表或元组)。举个例子,我在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
如何解决这个问题?感谢。
答案 0 :(得分:0)
您无需使用csv。只需逐行读取文件并将其拆分。
with open("data.csv", 'r') as f:
for line in f:
key, *value = line.rstrip("\n").split(',')
result = {key: list(value)}
答案 1 :(得分:0)
这会创建一个你想要的字典:
avg_prod_reorder_time = {r[0]: r[1:] for r in reader if r}
dict由键/值对组成,但您的数据不是成对格式化的。上面的代码将第一个元素作为键,并形成所有剩余元素的列表。条件if r
会跳过空行。
答案 2 :(得分:0)
考虑你有一个像这样的csv文件,
<强> some.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']
的{p> row[1:]
,即[1,2]
#List slicing
与其他行类似。
注意:强>
列表切片意味着根据索引切片列表, 如果您不了解它们,请尝试此操作。一般形式是这样的,
your_list [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]