Lea dos columnas CSV como dict con 1ra columna como clave

Tengo un CSV con dos columnas, la columna uno es el equipo dedicado a un edificio en particular en nuestro proyecto.

La segunda columna es el número de edificio real.

Lo que estoy buscando es un diccionario con la primera columna como la clave y los edificios que pertenecen a ese equipo en la lista.

He probado varias formas de csv.reader y csv.DictReader junto con diferentes bucles para volver a escribir los datos en otro diccionario, pero no puedo obtener la estructura que quiero.

CSV:

 team,bldg, 3,204, 3,250, 3,1437, 2,1440, 1,1450, 

La estructura del diccionario sería la siguiente:

 dict["1"] = ["1450"] dict["2"] = ["1440"] dict["3"] = ["204", "250", "1437"] 

Esto funciona:

 import csv result={} with open('/tmp/test.csv','r') as f: red=csv.DictReader(f) for d in red: result.setdefault(d['team'],[]).append(d['bldg']) #results={'1': ['1450'], '3': ['204', '250', '1437'], '2': ['1440']} 

El útil collections.defaultdict de collections.defaultdict en la biblioteca estándar simplifica el trabajo de esta tarea:

 import csv import collections as co dd = co.defaultdict(list) with open('/path/to/your.csv'),'rb') as fin: dr = csv.DictReader(fin) for line in dr: dd[line['team']].append(line['bldg']) # defaultdict(, {'1': ['1450'], '3': ['204', '250', '1437'], '2': ['1440']}) 

http://docs.python.org/2/library/collections.html#collections.defaultdict

El primer argumento proporciona el valor inicial para el atributo default_factory ; el valor predeterminado es None .