首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过组合值将字典列表中的字典合并

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

Stack Overflow用户
提问于 2022-02-01 16:53:00
回答 1查看 404关注 0票数 1

请帮帮我。我从Model.objects.value设置了查询集(‘name’,'language__name'),它给出了字典列表:

代码语言:javascript
运行
复制
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'}];

除了单位键和值外,我还能做一个字典列表吗?我想变成这样:

代码语言:javascript
运行
复制
list = [{'id': 1, 'name': 'Adel', 'language':['С#','Python']},
{'id': 5, 'name': 'Dora', 'language': ['С#','Java']},
{'id': 6, 'name': 'Dars', 'language': 'Python'}];

我试过这个:

代码语言:javascript
运行
复制
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()))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 05:49:02

您可以在lst上迭代并创建一个字典out,其中键对应于lst中的dicts中的"id“值,而这些值是dicts。在每次迭代中,检查"language“键下的值是否是一个列表,如果它是一个列表,则追加到列表中,如果不是,则创建一个列表。最后,将out的值传递给列表构造函数以获得最终结果。

代码语言:javascript
运行
复制
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())

输出:

代码语言:javascript
运行
复制
[{'id': 1, 'name': 'Adel', 'language': ['С#', 'Python']},
 {'id': 5, 'name': 'Dora', 'language': ['С#', 'Java']},
 {'id': 6, 'name': 'Dars', 'language': 'Python'}]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70944431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档