2016-04-26 7 views
-1

Frustriert hier so helfen sehr willkommen.Konstruieren eines verschachtelten Wörterbuch mit dict Verständnis

ich eine Datei haben, data_fields

lname,fname,age,UID 
macpherson,tom,16,219 
goldman,tim,13,316 
smith,jon,11,414 
doe,jon,59,512 

ein Wörterbuch auf der 'UID' Wert wie unten

import csv 
with open(data_fields) as readme: 
    reader = csv.reader(readme) 
    headers = reader.next() 
    UIDindex = headers.index('UID') 
    people = dict() 
    for person in reader: 
     people[person[UIDindex]] = {k:v for k,v in zip(headers,person) if not k=='UID'} 
import pprint 
pprint.pprint(people) 

{'219': {'age': '16', 'fname': 'tom', 'lname': 'macpherson'}, 
'316': {'age': '13', 'fname': 'tim', 'lname': 'goldman'}, 
'414': {'age': '11', 'fname': 'jon', 'lname': 'smith'}, 
'512': {'age': '59', 'fname': 'jon', 'lname': 'doe'}} 

verkeilt mache Welche OK ~ ish funktioniert. Aber im Interesse der nicht zu schaffen die Menschen dict() vorne Ich habe zusammen eine Form von dict Verständnis zu setzen versuchen, dass die ‚für Person in Leser-Schleife‘ umfassen würde und mir erlauben,

return <elusive dict comprehension yielding same dict as above> 
zu tun

In diesem Bestreben habe ich versagt, rund. und habe eine frustrierende Zeit damit verbracht. Zeit, die Experten hier zu fragen! Kann jemand mit diesem flüchtigen Verständnis helfen? Ist das mit Python möglich (hier läuft 2.7.6).

dank

Antwort

1

Was ist das:

people={person[UIDindex]:{k:v for k,v in zip(headers, person) if not k=='UID'} for person in reader}