簡體   English   中英

如何將具有多個鍵值的dict數組轉換為具有單個鍵值的dict?

[英]How to transform a dict array with multiple key values into a dict with single key value?

我有以下輸入數據

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分配解決方案嗎?

有任何想法嗎?

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

為什么不用列表理解做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'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM