将一个字典列表转换为一个字典

4

我有一个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'}
}

我该如何最好地实现这一点?谢谢。

这与Python-从字典列表中创建字典类似,但有所不同。


3
你有尝试过任何事情吗? - Ashwini Chaudhary
4个回答

13

您也可以使用字典理解来实现这一点。

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'}}

3
def to_dict(dicts):
    if not dicts:
        return {}
    out_dict = {}
    for d in dicts:
        out_dict[d.pop('name')] = d
    return out_dict

1
你不需要使用守卫语句(if not dicts: return {})。如果dicts为空,return out_dict将会返回一个空字典。 (另外,感谢您提醒我字典有一个pop方法。) - Kevin J. Chase
2
我想要返回字典,即使None被传递作为参数值。 - Łukasz Rogalski
明白了。我猜处理“None”输入是你的个人喜好吧。 - Kevin J. Chase

1
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}

谢谢。是否可以创建一个不需要指定其他键值对的方式,比如 'id':x['id'], 'year':x['year'] - Tim

1

try like this:

>>> 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'}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接