如何合并嵌套字典列表的同键值并保留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)
代码说明
- 遍历原始字典的每个页面键,为每个页面单独初始化
defaultdict,避免全局合并导致页面区分丢失。 - 收集当前页面内的所有键值对,相同键的值会被追加到同一列表中。
- 处理临时字典结果:单值键保持
{key: value}格式,多值键转为{key: [value1, value2]}格式,整理为列表后存入最终字典。 - 最终结果完整保留所有顶级页面键,同时完成同键值的合并。
内容的提问来源于stack exchange,提问作者Vai
相关产品推荐
相关产品推荐

