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

如何合并嵌套字典列表的同键值并保留page层级结构?

字典结构转换实现方案

需求说明

需要将原始嵌套字典结构,把同一页面下相同键的多个值合并为列表,同时保留page_1、page_2这类顶级键。

原始字典结构

{'page_1': [{'useless': '73636763'}, 
  {'good': 'info is good'}, 
  {'good': 'info is also good'}, 
  {'nice': 'info is nice'}, 
  {'nice': 'info is also nice '}],
'page_2': [{'useless': '87465432'}, 
  {'good': 'info is good on page 2'}, 
  {'good': 'info is also good on page 2'}, 
  {'nice': 'info is nice on page 2'}, 
  {'nice': 'info is also nice on page 2'}]}

目标字典结构

{
    'page_1': [{'useless': '73636763'}, 
    {'good': ['info is good', 'info is also good']},
    {'nice': ['info is nice', 'info is also nice']}], 
    'page_2': [{'useless': '87465432'}, 
    {'good': ['info is good on page 2', 'info is also good on page 2']},
    {'nice': ['info is nice on page 2', 'info is also nice on page 2']}]
}

尝试的问题代码

使用defaultdict时丢失了顶级页面键,代码如下:

from collections import defaultdict

dict_from_collections = defaultdict(list)
for item in mydict:
    for pair in mydict[item]:
        for key, value in pair.items():
            dict_from_collections[key].append(value)

正确实现方法

核心是为每个页面单独处理键值合并,而非全局统一收集,以此保留顶级页面键。

代码实现

from collections import defaultdict

# 原始字典
mydict = {'page_1': [{'useless': '73636763'}, 
  {'good': 'info is good'}, 
  {'good': 'info is also good'}, 
  {'nice': 'info is nice'}, 
  {'nice': 'info is also nice '}],
'page_2': [{'useless': '87465432'}, 
  {'good': 'info is good on page 2'}, 
  {'good': 'info is also good on page 2'}, 
  {'nice': 'info is nice on page 2'}, 
  {'nice': 'info is also nice on page 2'}]}

result = {}
for page_key, items in mydict.items():
    # 为当前页面创建临时defaultdict,用于合并同键值
    temp_dict = defaultdict(list)
    for pair in items:
        for key, value in pair.items():
            temp_dict[key].append(value)
    # 将临时字典转为目标格式的列表:单值保持原字典形式,多值封装为列表字典
    page_result = []
    for key, values in temp_dict.items():
        if len(values) == 1:
            page_result.append({key: values[0]})
        else:
            page_result.append({key: values})
    # 存入最终结果字典
    result[page_key] = page_result

# 输出结果
print(result)

代码说明

  1. 遍历原始字典的每个页面键,为每个页面单独初始化defaultdict,避免全局合并导致页面区分丢失。
  2. 收集当前页面内的所有键值对,相同键的值会被追加到同一列表中。
  3. 处理临时字典结果:单值键保持{key: value}格式,多值键转为{key: [value1, value2]}格式,整理为列表后存入最终字典。
  4. 最终结果完整保留所有顶级页面键,同时完成同键值的合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:50:18