是否将csv.DictReader对象转换为字典列表?

2024-04-26 10:04:38 发布

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

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

但是readercsv.DictReader的类型是吗? 如何将reader转换为字典列表? 谢谢。


Tags: csvcsvfilename列表字典namesspambaked
2条回答

使用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'}]
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实际上也会这样做,所以如果出于某种原因您真的想要一个dict:

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中插入时的顺序保持是一个实现细节并且可能会改变,但是如果我们足够使用它,它可能只需要保持:)

相关问题 更多 >