[英]Converting the contents of a CSV file into a dictionary
到目前為止我的代碼是一個基本上讀取csv文件並打印其內容的函數:
def read(filename):
with open(filename, 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for row in reader:
print(row)
sailor.csv
內容:
name, mean performance , std dev
Alice, 100, 0,
Bob, 100, 5,
Clare, 100, 10,
Dennis, 90, 0,
Eva, 90, 5,
read('sailor.csv')
並運行該函數
電流輸出:
['name', ' mean performance ', ' std dev']
['Alice', ' 100', ' 0', '']
['Bob', ' 100', ' 5', '']
['Clare', ' 100', ' 10', '']
['Dennis', ' 90', ' 0', '']
['Eva', ' 90', ' 5', '']
所需產量:
{'Dennis': (90.0, 0.0), 'Clare':(100.0, 10.0),
'Eva': (90.0, 5.0), 'Bob': (100.0, 5.0), 'Alice': (100.0, 0.0)}
任何想法如何實現這一輸出? 如果有幫助,請使用Python 3.4.2,我們將非常感謝您對答案的解釋!
使用csv
標准庫和字典理解...
import csv
with open('sailor.csv') as csvfile:
reader = csv.reader(csvfile)
next(reader)
d = {r[0] : tuple(r[1:-1]) for r in reader}
其中d
將是你想要的字典。 d[1:-1]
將數組從第二個切換到第二個到最后一個元素。
編輯:跳過標題,轉換為元組
我想這就是你想要的:
import csv
def read(filename):
out_dict = {}
with open(filename, 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
next(csvfile) # skip the first row
for row in reader:
out_dict[row[0]] = float(row[1]), float(row[2])
print(row)
return out_dict
print(read('data.csv'))
打印:
{'Bob': (' 100', ' 5'), 'Clare': (' 100', ' 10'), 'Alice': (' 100', ' 0'), 'Dennis': (' 90', ' 0'), 'Eva': (' 90', ' 5')}
這里解釋不多。 只需將值放入字典中,並跳過添加的第一行。 我認為人名是獨一無二的。
所以...我知道這個問題已經得到了回答,但我認為我只是在混合中添加一個單行來增加縮短答案:
from csv import reader
from itertools import islice
{r[0] : tuple(r[1:-1]) for r in islice(reader(open('sailor.csv')), 1, None)}
唯一真正新穎的事情是添加islice
以干凈地跳過標題行。
使用DictReader:
def read(filename):
with open(filename, 'r') as csvfile:
reader = csv.DictReader(csvfile, delimiter=',')
for row in reader:
print(row)
如果我可以,這是我的解決方案:
>>> import pyexcel as pe
>>> s = pe.load("sailor.csv", name_rows_by_column=0, name_columns_by_row=0)
>>> s.format(float)
>>> s
Sheet Name: csv
+--------+------------------+---------+---+
| | mean performance | std dev | |
+========+==================+=========+===+
| Alice | 100 | 0 | 0 |
+--------+------------------+---------+---+
| Bob | 100 | 5 | 0 |
+--------+------------------+---------+---+
| Clare | 100 | 10 | 0 |
+--------+------------------+---------+---+
| Dennis | 90 | 0 | 0 |
+--------+------------------+---------+---+
| Eva | 90 | 5 | 0 |
+--------+------------------+---------+---+
>>> del s.column[''] # delete the column which has '' as its name
>>> s.to_dict(True) # make a dictionary using row names as key
OrderedDict([('Alice', [100.0, 0.0]), ('Bob', [100.0, 5.0]),
('Clare', [100.0, 10.0]), ('Dennis', [90.0, 0.0]), ('Eva', [90.0, 5.0])])
這是關於pyexcel的pe.load和to_dict的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.