csv文件names.csv
包含内容:
first_name last_name
Baked Beans
Lovely Spam
Wonderful Spam
我想把它读成一个字典列表,第一行包含键:
>>> import csv
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile)
... for row in reader:
... print(row['first_name'], row['last_name'])
...
Baked Beans
Lovely Spam
Wonderful Spam
但reader
csv.DictReader
的类型是什么?
如何将reader
转换为词典列表?
感谢。
答案 0 :(得分:20)
import csv
with open("in.csv") as csvfile:
reader = csv.DictReader(csvfile,delimiter=" ")
print(list(reader))
[{'first_name': 'Baked', 'last_name': 'Beans'}, {'first_name': 'Lovely', 'last_name': 'Spam'}, {'first_name': 'Wonderful', 'last_name': 'Spam'}]
如果分隔符实际上不是,
,则需要指定" "
或其他任何内容。
为了清除任何混淆,代码也适用于python3.6,唯一的区别是使用DictReader默认情况下会Orderdicts:
In [1]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: print(list(reader))
...:
[OrderedDict([('first_name', 'Baked'), ('last_name', 'Beans')]), OrderedDict([('first_name', 'Lovely'), ('last_name', 'Spam')]), OrderedDict([('first_name', 'Wonderful'), ('last_name', 'Spam')])]
您可以完全相同地访问密钥,OrderedDict
只保留密钥插入顺序:
In [2]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in reader:
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
Baked Beans
Lovely Spam
Wonderful Spam
其中py3.6实际上也是如此,所以如果由于某种原因你真的想要一个字典:
In [5]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in map(dict, reader):
...: print(dct)
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
{'first_name': 'Baked', 'last_name': 'Beans'}
Baked Beans
{'first_name': 'Lovely', 'last_name': 'Spam'}
Lovely Spam
{'first_name': 'Wonderful', 'last_name': 'Spam'}
Wonderful Spam
在py3.6中插入时的订购保留是一个实现细节并且可能会发生变化,但如果我们有足够的人使用它,它可能只需要保留:)
答案 1 :(得分:10)
使用list()
:
print(list(reader))
演示:
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile, delimiter=" ")
... print(list(reader))
...
[{'first_name': 'Baked', 'last_name': 'Beans'}, {'first_name': 'Lovely', 'last_name': 'Spam'}, {'first_name': 'Wonderful', 'last_name': 'Spam'}]
答案 2 :(得分:3)
创建功能
import csv
def csv_to_dict(filename):
result_list=[]
with open(filename) as file_obj:
reader = csv.DictReader(file_obj, delimiter=delimiter)
for row in reader:
result_list.append(dict(row))
return result_list
并使用它:
list_of_dicts = csv_to_dict('names.csv')
答案 3 :(得分:2)
csv.DictReader创建一个dictreader对象,如标题中所述。该对象仅在文件打开且无法切片时可用。
根据标题将对象转换为列表。...
list_of_dicts = list(your_dictreader_object)