Python 将词典列表转换为词典

Python 将词典列表转换为词典,python,dictionary,Python,Dictionary,我有一个Python词典列表 [ {'id':'1', 'name': 'a', 'year': '1990'}, {'id':'2', 'name': 'b', 'year': '1991'}, {'id':'3', 'name': 'c', 'year': '1992'}, {'id':'4', 'name': 'd', 'year': '1993'}, ] 我想将此列表转换为一个字典字典,其键为name的值。注意这里列表中的不同项目具有不同的name值 { 'a': {'id':'1',

我有一个Python词典列表

[
{'id':'1', 'name': 'a', 'year': '1990'},
{'id':'2', 'name': 'b', 'year': '1991'},
{'id':'3', 'name': 'c', 'year': '1992'},
{'id':'4', 'name': 'd', 'year': '1993'},
]
我想将此列表转换为一个字典字典,其键为
name
的值。注意这里列表中的不同项目具有不同的
name

{
'a': {'id':'1', 'year': '1990'},
'b': {'id':'2', 'year': '1990'},
'c': {'id':'3', 'year': '1990'},
'd': {'id':'4', 'year': '1990'}
}
实现这一目标的最佳方式是什么?谢谢

这与类似,但不同。

请尝试以下操作:

z = [
{'id':'1', 'name': 'a', 'year': '1990'},
{'id':'2', 'name': 'b', 'year': '1991'},
{'id':'3', 'name': 'c', 'year': '1992'},
{'id':'4', 'name': 'd', 'year': '1993'},
]
dict_ = {indic['name']:{
        k:indic[k] for k in indic if k != 'name'} for indic in z}
>>> my_list = [
{'id':'1', 'name': 'a', 'year': '1990'},
{'id':'2', 'name': 'b', 'year': '1991'},
{'id':'3', 'name': 'c', 'year': '1992'},
{'id':'4', 'name': 'd', 'year': '1993'},
]
>>> my_dict = {}
>>> for x in my_list:
...     my_dict[x['name']] = dict((key, value) for key,value in x.items() if key!='name')
... 
>>> my_dict
{'a': {'id': '1', 'year': '1990'}, 'c': {'id': '3', 'year': '1992'}, 'b': {'id': '2', 'year': '1991'}, 'd': {'id': '4', 'year': '1993'}}

您也可以通过使用

结果:-

{'a': {'year': '1990', 'id': '1'}, 
 'c': {'year': '1992', 'id': '3'}, 
 'b': {'year': '1991', 'id': '2'}, 
 'd': {'year': '1993', 'id': '4'}}

你试过什么吗?谢谢。是否可以创建它,以便不需要指定其他键,如
'id':x['id'],'year':x['year']
?您不需要guard子句(
如果不使用dicts:return{}
)。如果
dicts
为空,
return out\u dict
仍将返回一个空字典。(另外,感谢您提醒我字典有一个
pop
方法。)即使
None
作为参数值传递,我也要返回dict。明白了。我想,你处理
None
输入时的品味问题。
data = [
        {'id':'1', 'name': 'a', 'year': '1990'},
        {'id':'2', 'name': 'b', 'year': '1991'},
        {'id':'3', 'name': 'c', 'year': '1992'},
        {'id':'4', 'name': 'd', 'year': '1993'},
       ]

print {each.pop('name'): each for each in data}  
{'a': {'year': '1990', 'id': '1'}, 
 'c': {'year': '1992', 'id': '3'}, 
 'b': {'year': '1991', 'id': '2'}, 
 'd': {'year': '1993', 'id': '4'}}