You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在匹配特定值时将字典数组的指定值合并到另一字典数组

合并两个字典数组:匹配特定值后合并指定字段

嘿,我来帮你搞定这个需求!核心思路是先把作者数组转换成以writer_id为键的映射字典,这样能高效匹配对应的作者信息,再遍历书籍数组把需要的字段合并进去。

先补全你的示例数据(假设authors里包含writer_id字段)

books = [
    {'writer_id': '123-456-789', 'index': None, 'title': 'Yellow Snow'},
    {'writer_id': '888-888-777', 'index': None, 'title': 'Python for Dummies'},
    {'writer_id': '999-121-223', 'index': 'Foo', 'title': 'Something Else'}
]

authors = [
    {'roles': ['author'], 'profile': 'John Doe', 'writer_id': '123-456-789'},
    {'roles': ['author', 'editor'], 'profile': 'Jane Smith', 'writer_id': '888-888-777'},
    {'roles': ['contributor'], 'profile': 'Bob Brown', 'writer_id': '999-121-223'}
]

实现步骤与代码

  1. 构建作者映射字典:把authors数组转成以writer_id为键的字典,这样查找作者信息的时间复杂度是O(1),比嵌套循环高效得多
  2. 遍历书籍数组合并字段:根据每个书籍的writer_id找到对应的作者,将需要的字段(比如roles、profile)合并到书籍字典中

方式1:直接修改原books数组

# 构建作者映射
author_map = {auth['writer_id']: auth for auth in authors}

# 遍历书籍合并字段
for book in books:
    writer_id = book['writer_id']
    if writer_id in author_map:
        # 把需要的字段合并进去,这里以roles和profile为例
        book['roles'] = author_map[writer_id]['roles']
        book['profile'] = author_map[writer_id]['profile']

# 查看合并结果
print(books)

方式2:创建新数组,不修改原数据(更安全)

如果你不想改动原有的books数组,可以创建新的字典列表:

author_map = {auth['writer_id']: auth for auth in authors}

# 生成合并后的新数组
merged_books = []
for book in books:
    writer_id = book['writer_id']
    # 用字典解包合并,优先保留book里的字段(如果有重复键的话)
    merged_book = {**book, **author_map.get(writer_id, {})}
    merged_books.append(merged_book)

print(merged_books)

结果说明

不管用哪种方式,最终你都会得到包含作者信息的书籍字典数组,比如第一个书籍会变成:

{'writer_id': '123-456-789', 'index': None, 'title': 'Yellow Snow', 'roles': ['author'], 'profile': 'John Doe'}

如果某个书籍的writer_id在authors里找不到,那对应的字段会保持原样(方式1)或者不新增字段(方式2),你可以根据需求调整逻辑,比如添加默认值。

内容的提问来源于stack exchange,提问作者rg88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:15:13