2017-08-10 89 views
1

我想從csv文件讀取字典。問題是我每行有3個值(不僅僅是2),並且想要轉換爲第一個值爲鍵並且最後2個值組合爲單個值(例如使用列表或元組)的字典。舉個例子,我有以下內部CSV:嘗試將csv文件讀取到字典時發生Python錯誤

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

這將創建一個字典,你想:

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

的字典包含鍵/值對的,但你的數據不是成對格式化。上面的代碼將第一個元素作爲關鍵字,並形成所有剩餘元素的列表。條件if r跳過空行。

0

您無需使用csv。只需逐行讀取文件並分割即可。

with open("data.csv", 'r') as f: 
    for line in f: 
     key, *value = line.rstrip("\n").split(',') 
     result = {key: list(value)} 
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:] 

在這裏,我們用row[1:]

即對第一個

分配

mydict[row[0]]

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

對於其他行類似。

注:

列表限幅裝置切片基於索引列表, 試試這個,如果你不知道它們沒有。一般形式是這樣的,

your_list [啓動: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]