Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PYTHON:如何以最具PYTHON风格的方式将两个词典合并到一个列表中_Python_List_Dictionary - Fatal编程技术网

PYTHON:如何以最具PYTHON风格的方式将两个词典合并到一个列表中

PYTHON:如何以最具PYTHON风格的方式将两个词典合并到一个列表中,python,list,dictionary,Python,List,Dictionary,我有一张单子 result = [ { "name": "James", "label":"Student", "class": 18 }, { "name": "Jacob", "label":"Professor", "class": 18 }, { "name": "Jeff", "label":"Student",

我有一张单子

result = [
    {
        "name": "James",
        "label":"Student",
        "class": 18
    },
    {
        "name": "Jacob",
        "label":"Professor",
        "class": 18
    },
    {
        "name": "Jeff",
        "label":"Student",
        "class": 19
    }
]
我想把两本字典合并到同一个类中

我试过:

res = [{item['label']:item['name'],'class':item['class']} for item in result]

print(res)

>>[{'Student': 'James', 'class': 18}, {'Professor': 'Jacob', 'class': 18}, {'Student': 'Jeff', 'class': 19}] 
所需输出的示例:

result = [
    {
        "Student": "James",
        "Professor": "Jacob",
        "class": 18
    },
    {
        "Student": "Jeff",
        "class": 19
    }
]

有人能帮我做这个吗?提前感谢您

定义一个名为合并的函数,并创建一个字典合并以跟踪访问的类,然后每当出现具有相同类的记录时,我们只需使用
标签名
的键值对更新该类的字典:

def merge(dicts):
    merged = {}
    for d in dicts:
        key = d['class']
        if key in merged:
            merged[key][d['label']] = d['name']
        else:
            merged[key] = {'class': d['class'], d['label']: d['name']}
    return list(merged.values())
结果:

# print(merge(result))

[{'Student': 'James', 'class': 18, 'Professor': 'Jacob'}, {'Student': 'Jeff', 'class': 19}]

是否始终是连接列表中不同元素的关键?您尝试了什么,它到底有什么问题?您的目标数据结构可能是错误的。它只允许每个班级有一个学生。您希望与
“Student”
键关联的值是字符串列表。您可能希望更改名为
“Students”
。对于否决此问题的人-至少提及否决的原因,并向提问者提供修改此问题的机会。不加评论地简单地投反对票对新来者是没有帮助的。你需要明白,对于那些较早加入的人来说,他们的问题和答案更容易获得选票。现在非常困难,因为许多早些时候加入的人已经提出了基本问题或回答了这些基本问题,他们仍然在这些问题上赢得选票。对于一个新来的人来说,获得选票真的很难。考虑一下这个问题,这很好用。但必须按班级对听写进行分类。除此之外,完美!!感谢you@jpaulc为了使算法更有效,做了一些更改,请查看编辑后的答案。