我有以下输入数据
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']
有效。但是,我可以使用单行字典分配解决方案吗?
有什么想法吗?
答案 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'}