首页 > 文章列表 > 如何高效合并两个包含键值对列表,并去除重复元素?

如何高效合并两个包含键值对列表,并去除重复元素?

165 2025-02-27

合并列表中的数据

如何合并列表以获得所需的效果?考虑以下两个列表:

book1 = [{
    "高校": ["南京大学", "天津大学", "南开大学"]
}, {
    "国家": ["印度", "美国"]
}]

book2 = [{
    "高校": ["南京大学", "东华大学", "中南大学"]
}, {
    "国家": ["乌克兰", "俄罗斯"]
}, {
    "论坛": ["顶尖科学家论坛", "统计之都"]
}]

目标是将这些列表合并成以下结构:

book3 = [{
    "高校": ["南京大学", "天津大学", "南开大学", "东华大学", "中南大学"]
}, {
    "国家": ["印度", "美国", "乌克兰", "俄罗斯"]
}, {
    "论坛": ["顶尖科学家论坛", "统计之都"]
}]

合并过程

合并过程中需要考虑以下几点:

  • 遍历两个列表中所有字典项。
  • 检查键名是否存在于目标字典 book3 中。
  • 将键值附加到现有键或创建新键。
  • 确保键值是原值的并集(防止重复)。

以下代码演示了合并过程:

gx = []
gj = []
lt = []
for i in book1[0]["高校"]:
    gx.append(i)
for i in book1[1]["国家"]:
    gj.append(i)
for i in book2[0]["高校"]:
    if gx.count(i) == 0:
        gx.append(i)
for i in book2[1]["国家"]:
    if gj.count(i) == 0:
        gj.append(i)
for i in book2[2]["论坛"]:
    lt.append(i)

newbook3 = [{
    "高校": gx
}, {
    "国家": gj
}, {
    "论坛": lt
}]

动态遍历

上面的代码适用于列表结构稳定的情况。如果列表结构不稳定,需要动态遍历键名:

newOBJ = {}
newBook = []
def appendList(aList):
    for i in range(len(aList)):
        for k, v in aList[i].items():
            if k in newOBJ:
                CList = newOBJ[k]
            else:
                newOBJ[k] = []
                CList = newOBJ[k]
            for z in v:
                if CList.count(z) == 0:
                    CList.append(z)

appendList(book1)
appendList(book2)
for k, v in newOBJ.items():
    newBook.append({k: v})
来源:1740134869