Python词典理解中的多项赋值

Leo*_*eon 3 python dictionary list-comprehension python-3.x

让我们说我有一个清单

demo  = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']]
Run Code Online (Sandbox Code Playgroud)

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

[{'Adam':'Chicago', 'Gender':'Male', 'Location':'Chicago', 'Team':'Bears'},
{'Brandon':'Miami', 'Gender':'Male', 'Location':'Miami', 'Team':'Dolphins'} }
Run Code Online (Sandbox Code Playgroud)

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

{ s[0]:s[1] for s in demo} 
Run Code Online (Sandbox Code Playgroud)

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

{ s[0]:s[1],'Gender':s[2], 'Team':s[3] for s in demo} 
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*per 6

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

modified_demo = [{s[0]:s[1],'Gender':s[2], 'Team':s[3]} for s in demo]
Run Code Online (Sandbox Code Playgroud)


Mar*_*cin 5

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

dicts= [dict(zip(('Name','Gender','Location', 'Team'), data) for data in demo]
Run Code Online (Sandbox Code Playgroud)

您不需要"名称"标签,您希望将该名称用作复制位置的标签.所以,现在你需要解决这个问题:

for d in dicts:
    d[d['Name']] = d['Location']
    del d['Name'] # or not, if you can tolerate the extra key
Run Code Online (Sandbox Code Playgroud)

或者,您可以一步完成:

dicts = [{name:location,'Location':location,'Gender':gender, 'Team':team} for name,location,gender,team in demo]
Run Code Online (Sandbox Code Playgroud)