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

时间:2019-01-29 07:18:56

标签: 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']

有效。但是,我可以使用单行字典分配解决方案吗?

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

使用dictionary创建dict comprehensions-

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

答案 1 :(得分:4)

为什么不使用列表理解来做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(...)使其成为字典,所以实际上,奇数索引值将是键,甚至索引值将是键值。

答案 2 :(得分:3)

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