簡體   English   中英

使用列表推導從字典創建字典列表

[英]Creating list of dictionaries from a dictionary using list comprehension

我有一個格式的字典:

d = {'award1' : { 'nominees': ['name1', 'name2'],
                  'presenters': ['name3', 'name4'],
                  'winner' : 'name1'
                }
     'award2' : { 'nominees': ['name5', 'name6'],
                  'presenters': ['name7', 'name8'],
                  'winner' : 'name6'
                }
    }

我正在嘗試創建一個分隔值的字典列表,即結果應該是:

my_list = [ { 'award1': ['name1','name2'], 'award2': ['name5','name6'] },
            { 'award1': ['name3','name4'], 'award2': ['name7','name8'] },
            { 'award1': 'name1', 'award2': 'name6' }
          ]

有沒有辦法通過單行列表理解來做到這一點?

到目前為止我已經嘗試過:

lst = [{key:val['nominees'], key:val['presenters'], key:val['winner']} for key, val in d.items()]

我的代碼使用普通的“for”循環:

nominees, winner, presenters = {}, {}, {}
    for key, val in d.items():
        nominees[key] = val['nominees']
        winner[key] = val['winner']
        presenters[key] = val['presenters']
lst = [nominees, winner, presenters]

這是實現此目的的單線列表理解+字典理解版本:

d = {
    'award1' : { 
        'nominees': ['name1', 'name2'],
        'presenters': ['name3', 'name4'],
        'winner' : 'name1'
     },
     'award2' : {
         'nominees': ['name5', 'name6'],
         'presenters': ['name7', 'name8'],
         'winner' : 'name6'
      }
}

# List of keys to maintain the order of elements in the desired list
nested_keys = ['nominees', 'presenters', 'winner']

# In Python 3.7+: If the insertion order of key in initial dict is same as
#                 order of desired list, we can use this to make it more generic
# nested_keys = list(d.values())[0].keys()

new_list = [{k: d[k][key] for k in d.keys()} for key in nested_keys]

new_list將在哪里舉行:

[
    {'award1': ['name1', 'name2'], 'award2': ['name5', 'name6']}, 
    {'award1': ['name3', 'name4'], 'award2': ['name7', 'name8']}, 
    {'award1': 'name1', 'award2': 'name6'}
]

暫無
暫無

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

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