3

假设我有一个清单

demo  = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']]

我想使用看起来像的理解来制作字典列表

[{'Adam':'Chicago', 'Gender':'Male', 'Location':'Chicago', 'Team':'Bears'},
{'Brandon':'Miami', 'Gender':'Male', 'Location':'Miami', 'Team':'Dolphins'} }

分配两个起始值很容易得到类似的东西

{ s[0]:s[1] for s in demo} 

但是有没有一种合法的方法可以在这个理解中分配多个值,看起来像

{ s[0]:s[1],'Gender':s[2], 'Team':s[3] for s in demo} 

这是一个如此具体的问题,而且我不知道搜索的术语,所以我很难找到它,上面的例子给了我一个语法错误。

4

3 回答 3

6

字典推导构建单个字典,而不是字典列表。你说你想制作一个字典列表,所以使用列表推导来做到这一点。

modified_demo = [{s[0]:s[1],'Gender':s[2], 'Team':s[3]} for s in demo]
于 2013-07-24T21:53:36.673 回答
6

您可以使用 zip 将每个条目转换为键值对列表:

dicts= [dict(zip(('Name','Gender','Location', 'Team'), data) for data in demo]

您不想要“名称”标签,您想使用名称作为重复位置的标签。所以,现在你需要修复字典:

for d in dicts:
    d[d['Name']] = d['Location']
    del d['Name'] # or not, if you can tolerate the extra key

或者,您可以一步完成:

dicts = [{name:location,'Location':location,'Gender':gender, 'Team':team} for name,location,gender,team in demo]
于 2013-07-24T22:02:16.883 回答
2

您的要求看起来很奇怪,您确定您没有尝试在逻辑上命名字段(这更有意义):

>>> demo  = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']]
>>> [dict(zip(['name', 'location', 'gender', 'team'], el)) for el in demo]
[{'gender': 'Male', 'team': 'Bears', 'name': 'Adam', 'location': 'Chicago'}, {'gender': 'Male', 'team': 'Dolphins', 'name': 'Brandon', 'location': 'Miami'}]
于 2013-07-24T22:02:06.983 回答