Parse a csv file and create a dictionary of partial results I have a bunch of .csv files which I have to read and look for data. The .csv file is of the format:




A row of data I will ignore
State,County,City
WA,king,seattle
WA,pierce,tacoma



In every csv file, the order of columns is not consistent. For example in csv1 the order can be State,County,City, in csv2 it can be City,County,State. What I am interested is the State and County. Given a county I want to find out what State it is in. I am ignoring the fact that same counties can exist in multiple States. The way I am approaching this:



with open(‘file.csv’) as f:
    data = f.read()

# convert the data to iterable, skip the first line
reader = csv.DictReader(data.splitlines(1)[1:])
lines = list(reader)
counties = {k: v for (k,v in ((line[‘county’], line[‘State’]) for line in lines)}


Is there a better approach to this?
You're on the right track, using a with block to open the file and csv.DictReader() to parse it.

Your list handling is a bit clumsy, though.  To skip a line, use next(f).  Avoid making a list of the entire file's data, if you can process the file line by line.  The dict comprehension has an unnecessary complication as well.

with open('file.csv') as f:
    _ = next(f)
    reader = csv.DictReader(f)
    counties = { line['County']: line['State'] for line in reader }


Your sample file had County as the header, whereas your code looked for line[‘county’].  I assume that the curly quotes are an artifact of copy-pasting, but you should pay attention to the capitalization.