![](/img/trans.png)
[英]Python: Creating a dictionary using list comprehension from a list using lambda
[英]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.