Convert csv.DictReader object to dictionary list?

The csv names.csv has the content:

 first_name last_name Baked Beans Lovely Spam Wonderful Spam 

I would like to read it in a list of dictionaries, with the first line containing the keys:

 >>> 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 

But is the reader type csv.DictReader ? How to convert reader to dictionary list? Thanks.

+6
source share
2 answers
 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'}] 

If the delimiter is not really, you need to specify " " or something else.

Just to eliminate any confusion, the code works just fine for python3.6, the only difference is that using DictReader gives Orderdicts by default:

 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')])] 

You can access keys in the same way, OrderedDict just keeps the order of key input:

 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 

Which py3.6 really does, so if for some reason you really need a 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 

Saving an order when pasting into py3.6 is an implementation detail and may change, but if you use it enough, it can just stay :)

+12
source

Use list() :

 print(list(reader)) 

Demo:

 >>> 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'}] 
+6
source

Source: https://habr.com/ru/post/984653/


All Articles