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

如何用Python从嵌套字典提取值?完善代码实现目标输出

Elasticsearch文档字段聚合解决方案

原始数据

[{'_index': 'script1',
  '_id': '123456',
  '_source': {'data_version': '20220701',
              'SD_RESOURCE_TYPE': 'PDE',
              'SD_RESOURCE_SIZE': 'UNIQUE'}},
 {'_index': 'script11',
  '_id': '123457',
  '_source': {'data_version': '20220701',
              'SD_RESOURCE_TYPE': 'CPS',
              'SD_RESOURCE_SIZE': 'CLUSTER'}},
 {'_index': 'script111',
  '_id': '123458',
  '_source': {'data_version': '20220701',
              'SD_RESOURCE_TYPE': 'HIGH',
              'SD_RESOURCE_SIZE': 'CLUSTER'}}]

需求目标

提取每个文档中_source字段的所有值,按字段名聚合到fields字典中,预期输出如下:

{'data_version': '20220701 20220701 20220701',
 'SD_RESOURCE_TYPE': 'PDE CPS HIGH',
 'SD_RESOURCE_SIZE': 'UNIQUE CLUSTER CLUSTER'}

(注:原预期输出中SD_RESOURCE_SIZE的第二个值存在笔误,已根据原始数据修正)

现有问题代码

fields = {}
for num, doc in enumerate(elastic_docs):
    source_data = doc["_source"]

这段代码仅提取了每个_source数据,但未做字段聚合操作,无法得到预期结果。

解决方案

要实现按字段名聚合值,需要遍历每个_source的键值对,将对应字段的值收集起来,最终转换为符合预期的格式:

正确代码

fields = {}
# 遍历所有文档,收集每个字段的值
for doc in elastic_docs:
    source_data = doc["_source"]
    for key, value in source_data.items():
        # 若字段未在字典中,先初始化空列表
        if key not in fields:
            fields[key] = []
        # 将当前值追加到对应字段的列表中
        fields[key].append(value)

# 把列表转为空格分隔的字符串,匹配预期输出格式
for key in fields:
    fields[key] = ' '.join(fields[key])

代码说明

  1. 初始化空字典fields用于存储聚合结果
  2. 遍历每个Elasticsearch文档,提取_source中的键值对
  3. 对每个字段,先判断是否已存在于fields中,不存在则初始化空列表,存在则追加当前值
  4. 最后将每个字段的列表转换为空格分隔的字符串,得到符合预期的格式

执行代码后即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:35:19