Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create dict using csv file with first row as keys

I'd like to create a list of dictionaries reading from a large csv file that uses the entries from the first row as keys. for example, test.csv

Header1, Header2, Header3
A,       1,       10
B,       2,       20
C,       3,       30

The resulting dict would look like:

MyList = [{'Header1': A, 'Header2': 1, 'Header3: 10}, {'Header1': B,     'Header2': 2, 'Header3: 20}, {'Header1': C, 'Header2': 3, 'Header3: 30}]

I know how to read a file, and think maybe a defaultdict from collections might be a good way, but can't get the syntax right.

like image 389
AP70 Avatar asked Mar 16 '23 14:03

AP70


1 Answers

This is exactly what csv.DictReader was made for.

import csv

with open('data.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print row

For the data.csv containing:

Header1,Header2,Header3
A,1,10
B,2,20
C,3,30

It prints:

{'Header2': '1', 'Header3': '10', 'Header1': 'A'}
{'Header2': '2', 'Header3': '20', 'Header1': 'B'}
{'Header2': '3', 'Header3': '30', 'Header1': 'C'}
like image 196
alecxe Avatar answered Apr 02 '23 15:04

alecxe