我有要转换成一本词典的词典列表
vpcs = [{'VPCRegion': 'us-east-1', 'VPCId': '12ededd4'},
{'VPCRegion': 'us-east-1', 'VPCId': '9847'},
{'VPCRegion': 'us-west-2', 'VPCId': '99485003'}]
我想将其转换为
{'us-east-1': '12ededd4', 'us-east-1': '9847', 'us-west-2': '99485003'}
我使用了此功能
def convert_dict(tags):
return {tag['VPCRegion']:tag['VPCId'] for tag in tags}
但是获得此输出不会转换列表中的第一个字典
{'us-east-1': '9847', 'us-west-2': '99485003'}
答案 0 :(得分:1)
也许词典列表可能适合您的需要-请参见下面的代码: [{'us-east-1':'12ededd4'},{'us-east-1':'9847'},{'us-west-2':'99485003'}]
要详细说明其他关于字典键的注释必须唯一,您可以看到,如果'vpcs'具有2个重复的'VPCRegion',则在注释行中将list_dict压缩起来会导致错误: 1”并成功创建新的dict(如果您删除“ VPCRegion”之一:“ us-east-1”)。
vpcs = [{'VPCRegion': 'us-east-1', 'VPCId': '12ededd4'},
{'VPCRegion': 'us-east-1', 'VPCId': '9847'},
{'VPCRegion': 'us-west-2', 'VPCId': '99485003'}]
def changekey(listofdict):
new_dict = {}
new_list = []
for member in listofdict:
new_key = member['VPCRegion']
new_val = member['VPCId']
new_dict.update({new_key:new_val})
new_list.append({new_key:new_val})
return new_dict, new_list
dict1,list_dict=changekey(vpcs)
print(dict1)
print(list_dict)
#dict4=dict(zip(*[iter(list_dict)]*2))
#print(dict4)
答案 1 :(得分:0)
由于您的输出必须将同一个名称下的多个值分组,因此您的输出将是列表的字典,而不是字符串的字典。
一种快速执行此操作的方法:
import collections
def group_by_region(vpcs):
result = collections.defaultdict(list)
for vpc in vpcs:
result[vpc['VPCRegion']].append(vpc['VPCId'])
return result
group_by_region(vpcs)
的结果将是{'us-east-1': ['12ededd4', '9847'], 'us-west-2': ['99485003']})
。
作为一种娱乐方式,这是一种隐秘但有效的表达方式,可以通过一种表达方式实现:
import itertools
{key: [rec['VPCId'] for rec in group]
for (key, group) in itertools.groupby(vpcs, lambda vpc: vpc['VPCRegion'])}