使用字典理解构造嵌套字典
constructing a nested dictionary using dict comprehension
在这里感到沮丧所以非常欢迎帮助。
我有一个文件,data_fields
lname,fname,age,UID
macpherson,tom,16,219
goldman,tim,13,316
smith,jon,11,414
doe,jon,59,512
我正在制作一个以 'UID' 值作为关键字的字典,如下所示
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'}}
效果不错~大概吧。
但是为了不预先创建 people dict(),我一直在尝试将某种形式的字典理解放在一起,其中包括 'for person in reader loop' 并允许我做
return <elusive dict comprehension yielding same dict as above>
在这一努力中,我彻底失败了。并在上面花费了令人沮丧的时间。是时候请教这里的专家了!
任何人都可以帮助理解这种难以捉摸的理解吗? python 是否可行(此处为 运行 2.7.6)。
谢谢
那个怎么样:
people={person[UIDindex]:{k:v for k,v in zip(headers, person) if not k=='UID'} for person in reader}
在这里感到沮丧所以非常欢迎帮助。
我有一个文件,data_fields
lname,fname,age,UID
macpherson,tom,16,219
goldman,tim,13,316
smith,jon,11,414
doe,jon,59,512
我正在制作一个以 'UID' 值作为关键字的字典,如下所示
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'}}
效果不错~大概吧。 但是为了不预先创建 people dict(),我一直在尝试将某种形式的字典理解放在一起,其中包括 'for person in reader loop' 并允许我做
return <elusive dict comprehension yielding same dict as above>
在这一努力中,我彻底失败了。并在上面花费了令人沮丧的时间。是时候请教这里的专家了! 任何人都可以帮助理解这种难以捉摸的理解吗? python 是否可行(此处为 运行 2.7.6)。
谢谢
那个怎么样:
people={person[UIDindex]:{k:v for k,v in zip(headers, person) if not k=='UID'} for person in reader}