La mejor manera de convertir datos CSV a dict

Tengo archivo csv con los siguientes datos

val1,val2,val3 1,2,3 22,23,33 

Entonces, ¿cómo puedo convertir los datos en dict

 dict1 = { 'val1': 1, 'val2': 2, 'val3': 3} dict2 = { 'val1': 22, 'val2': 23, 'val3': 33} fp = open('file.csv', 'r') reader = csv.reader(fp) for row in reader: ???? 

Gracias

 import csv reader = csv.DictReader(open('myfile.csv')) for row in reader: # profit ! 

Utilice csv.DictReader :

Cree un objeto que funcione como un lector normal, pero asigne la información leída a un dictado cuyas claves están dadas por el parámetro opcional de nombres de campo . El parámetro fieldnames es una sequence cuyos elementos están asociados con los campos de los datos de entrada en orden. Estos elementos se convierten en las claves del diccionario resultante. Si se omite el parámetro fieldnames , los valores en la primera fila del archivo csv se usarán como nombres de campo . Si la lectura de la fila tiene más campos que la secuencia de nombres de campo, los datos restantes se agregan como una secuencia codificada por el valor de restkey . Si la lectura de la fila tiene menos campos que la secuencia de los nombres de campo, las claves restantes toman el valor del parámetro opcional de intervalo de descanso . Cualquier otro argumento opcional o de palabra clave se pasa a la instancia del reader subyacente …

Lo bueno de usar ‘csv’ como se menciona en otras respuestas aquí es que se puede usar para leer un archivo (el caso de uso obvio) pero también para analizar una cadena de formato csv regular.

Ejemplo para leer un archivo csv:

 import csv with open('my_file.csv') as f: for line in csv.DictReader(f, fieldnames=('val1', 'val2', 'val3')): print(line) 

Observe que puede pasar explícitamente los encabezados que desea que sean las claves, lo que hace que sea muy fácil usar archivos CSV sin encabezados.

Otro caso de uso es leer una cadena regular con ‘csv’

Ejemplo:

 import csv my_csv_string = 'val1, val2, val3' my_csv_dict = next(csv.DictReader(StringIO(s), fieldnames=('key1', 'key2', 'key3'))) 

De todos modos, csv.DictReader() es lo que necesitas …