Python词典理解中的多项赋值

时间:2013-07-24 21:50:18

标签: python dictionary python-3.x list-comprehension

假设我有一个清单

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} 

这是一个特定的问题,我不知道搜索的条款,所以我很难找到它,上面的例子给我一个语法错误。

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

您可以使用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]

答案 2 :(得分: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'}]