如何将具有多个键值的dict数组转换为具有单个键值的dict?

2024-05-23 15:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下输入数据

options_d = [{'id': 36, 'label': 'Angular'},
 {'id': 37, 'label': 'Java'},
 {'id': 38, 'label': 'PHP'},
 {'id': 39, 'label': 'Python'},
 {'id': 40, 'label': 'C#'},
 {'id': 41, 'label': 'C'},
 {'id': 42, 'label': '.NET'},
 {'id': 43, 'label': 'Ruby'},
 {'id': 44, 'label': 'Rails'},
 {'id': 45, 'label': 'OS-Linux'},
 {'id': 55, 'label': 'Maschinenbau'},
 {'id': 56, 'label': 'Automotive'},
 {'id': 57, 'label': 'Engineering'}]

我想把它变成

{36: 'Angular',
 37: 'Java',
 38: 'PHP',
 39: 'Python',
 40: 'C#',
 41: 'C',
 42: '.NET',
 43: 'Ruby',
 44: 'Rails',
 45: 'OS-Linux',
 55: 'Maschinenbau',
 56: 'Automotive',
 57: 'Engineering'}

到目前为止我所做的是

skillsmap_person = {}
for option in options_d:
    skillsmap_person[option['id']] = option['label']

它起作用了。然而,有没有一行dict作业解决方案我可以使用?你知道吗

有什么想法吗?你知道吗


Tags: idnetoslinuxjavalabeloptionsrails
3条回答

为什么不做dict列表理解:

>>> dict([i.values() for i in options_d])
{36: 'Angular', 37: 'Java', 38: 'PHP', 39: 'Python', 40: 'C#', 41: 'C', 42: '.NET', 43: 'Ruby', 44: 'Rails', 45: 'OS-Linux', 55: 'Maschinenbau', 56: 'Automotive', 57: 'Engineering'}
>>> 

或对于较低版本(字典无序时):

>>> dict([list(i.values())[::-1] for i in options_d])
{36: 'Angular', 37: 'Java', 38: 'PHP', 39: 'Python', 40: 'C#', 41: 'C', 42: '.NET', 43: 'Ruby', 44: 'Rails', 45: 'OS-Linux', 55: 'Maschinenbau', 56: 'Automotive', 57: 'Engineering'}
>>> 

它简单地遍历字典列表,得到字典的值,然后有一个外部的dict(...)使它成为字典,所以实际上,奇数索引值将是键,偶数索引值将是值。你知道吗

options_d = [{'id': 36, 'label': 'Angular'},
 {'id': 37, 'label': 'Java'},
 {'id': 38, 'label': 'PHP'},
 {'id': 39, 'label': 'Python'},
 {'id': 40, 'label': 'C#'},
 {'id': 41, 'label': 'C'},
 {'id': 42, 'label': '.NET'},
 {'id': 43, 'label': 'Ruby'},
 {'id': 44, 'label': 'Rails'},
 {'id': 45, 'label': 'OS-Linux'},
 {'id': 55, 'label': 'Maschinenbau'},
 {'id': 56, 'label': 'Automotive'},
 {'id': 57, 'label': 'Engineering'}]

{elem['id'] : elem['label'] for elem in options_d}

让您:

{36: 'Angular',
 37: 'Java',
 38: 'PHP',
 39: 'Python',
 40: 'C#',
 41: 'C',
 42: '.NET',
 43: 'Ruby',
 44: 'Rails',
 45: 'OS-Linux',
 55: 'Maschinenbau',
 56: 'Automotive',
 57: 'Engineering'}

dict comprehensions创建dictionary

options_dict = {i['id']:i['label'] for i in options_d}
print(options_dict)
    {36: 'Angular',
     37: 'Java',
     38: 'PHP',
     39: 'Python',
     40: 'C#',
     41: 'C',
     42: '.NET',
     43: 'Ruby',
     44: 'Rails',
     45: 'OS-Linux',
     55: 'Maschinenbau',
     56: 'Automotive',
     57: 'Engineering'}

相关问题 更多 >