繁体   English   中英

通过组合值来合并字典列表中的字典

[英]Merge dictionaries in a list of dictionaries by combining the values

请帮帮我。 我有来自 Model.objects.value('name', 'language__name') 的查询集,它给了我字典列表:

list = [{'id': 1, 'name': 'Adel', 'language': 'С#'},
{'id': 1, 'name': 'Adel', 'language': 'Python'},
{'id': 5, 'name': 'Dora', 'language': 'С#'},
{'id': 5, 'name': 'Dora', 'language': 'Java'},
{'id': 6, 'name': 'Dars', 'language': 'Python'}];

我怎样才能做一个字典列表,但要单位键和值? 我想要这样:

list = [{'id': 1, 'name': 'Adel', 'language':['С#','Python']},
{'id': 5, 'name': 'Dora', 'language': ['С#','Java']},
{'id': 6, 'name': 'Dars', 'language': 'Python'}];

我试过这个:

mapping = {} 
for d in qs: 
    try: 
        entry = mapping[d['id']] # raises KeyError 
        entry['language__name'].append(d['language__name']) # raises AttributeError 
    except KeyError: 
        mapping[d['id']] = d 
    except AttributeError: 
        entry['language__name'] = [entry['language__name'], d['language__name']] 
        
print(list(mapping.values()))

您可以遍历lst并创建一个字典out其中键对应于lst中的字典中的“id”值,并且值是字典。 在每次迭代中,检查“语言”键下的值是否是列表,如果是列表,则检查 append 到列表,如果不是,则创建一个列表。 最后,将out的值传递给列表构造函数以获得最终结果。

out = {}
for d in lst:
    if d['id'] in out:
        if isinstance(out[d['id']]['language'], list):
            out[d['id']]['language'].append(d['language'])
        else:
            out[d['id']]['language'] = [out[d['id']]['language'], d['language']]
    else:
        out[d['id']] = d
out = list(out.values())

Output:

[{'id': 1, 'name': 'Adel', 'language': ['С#', 'Python']},
 {'id': 5, 'name': 'Dora', 'language': ['С#', 'Java']},
 {'id': 6, 'name': 'Dars', 'language': 'Python'}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM