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

如何从含重复值的三个Python列表构建合并型嵌套字典列表

问题

我尝试从三个Python列表构建嵌套字典列表,其中List_A包含重复值,需求是将每个外层键对应的所有内层键值对合并在一起。

我编写了如下代码:

A = ['sibsp', 'sibsp', 'pclass', 'pclass', 'pclass', 'age', 'age', 'age', 'age', 'age', 'age', 'fare', 'fare', 'fare', 'fare', 'fare', 'parch', 'parch'] 

B = ['(-0.001, 1.0]', '(1.0, 8.0]', '1', '2', '3', '(0.419, 19.0]', '(19.0, 25.0]', '(25.0, 31.8]', '(31.8, 41.0]', '(41.0, 80.0]', 'nan', '(-0.001, 7.854]', '(10.5, 21.679]', '(21.679, 39.688]', '(39.688, 512.329]', '(7.854, 10.5]', '(-0.001, 1.0]', '(1.0, 6.0]']

C = [-0.043281487422643504, 0.5199640685633579, -1.0039159555090957, -0.3644848445981264, 0.6664826567146916, -0.4000843004236305, 0.24183838283179523, -0.04150528802138758, -0.2219732761660194, 0.04505675173309271, 0.4037823142739484, 0.8047930720327325, -0.16862729546072658, -0.25014415313271576, -1.0575407967677335, 0.9062269696875864, 0.04021888607232296, -0.32565170564086077]

# 注:原代码中List_A应为A,此处修正笔误
listOfNestedDicts = [{i:{j:k}} for (i,j,k) in zip(A, B, C)]

得到的输出是一个嵌套字典列表,但不符合需求。由于sibsp、pclass、age、fare和parch是DataFrame中的唯一列,我需要将内层B的键映射到对应的C值,而当前输出中每个外层键对应多个独立字典。

我期望得到的输出如下:

[{'sibsp': {'(-0.001, 1.0]': -0.043281487422643504,'(1.0, 8.0]': 0.5199640685633579}},
 {'pclass': {'1': -1.0039159555090957 ,'2': -0.3644848445981264, '3': 0.6664826567146916}},
 {'age': {'(0.419, 19.0]': -0.4000843004236305,'(19.0, 25.0]': 0.24183838283179523,'(25.0, 31.8]': -0.04150528802138758,'(31.8, 41.0]': -0.2219732761660194,'(41.0, 80.0]': 0.04505675173309271,'nan': 0.4037823142739484}},
 {'fare': {'(-0.001, 7.854]': 0.8047930720327325,'(10.5, 21.679]': -0.16862729546072658, '(21.679, 39.688]': -0.25014415313271576,'(39.688, 512.329]': -1.0575407967677335,'(7.854, 10.5]': 0.9062269696875864}},
 {'parch': {'(-0.001, 1.0]': 0.04021888607232296,'(1.0, 6.0]': -0.32565170564086077}}]
解决方案

核心思路是先合并相同外层键的内层键值对,再转换为目标列表格式,以下是两种实现方式:

方式一:普通循环实现

A = ['sibsp', 'sibsp', 'pclass', 'pclass', 'pclass', 'age', 'age', 'age', 'age', 'age', 'age', 'fare', 'fare', 'fare', 'fare', 'fare', 'parch', 'parch'] 
B = ['(-0.001, 1.0]', '(1.0, 8.0]', '1', '2', '3', '(0.419, 19.0]', '(19.0, 25.0]', '(25.0, 31.8]', '(31.8, 41.0]', '(41.0, 80.0]', 'nan', '(-0.001, 7.854]', '(10.5, 21.679]', '(21.679, 39.688]', '(39.688, 512.329]', '(7.854, 10.5]', '(-0.001, 1.0]', '(1.0, 6.0]']
C = [-0.043281487422643504, 0.5199640685633579, -1.0039159555090957, -0.3644848445981264, 0.6664826567146916, -0.4000843004236305, 0.24183838283179523, -0.04150528802138758, -0.2219732761660194, 0.04505675173309271, 0.4037823142739484, 0.8047930720327325, -0.16862729546072658, -0.25014415313271576, -1.0575407967677335, 0.9062269696875864, 0.04021888607232296, -0.32565170564086077]

# 构建中间字典,统一存储相同外层键的内层键值对
temp_dict = {}
for key, sub_key, value in zip(A, B, C):
    if key not in temp_dict:
        temp_dict[key] = {}
    temp_dict[key][sub_key] = value

# 转换为目标格式的列表
result = [{k: v} for k, v in temp_dict.items()]
print(result)

方式二:使用collections.defaultdict简化代码

from collections import defaultdict

A = ['sibsp', 'sibsp', 'pclass', 'pclass', 'pclass', 'age', 'age', 'age', 'age', 'age', 'age', 'fare', 'fare', 'fare', 'fare', 'fare', 'parch', 'parch'] 
B = ['(-0.001, 1.0]', '(1.0, 8.0]', '1', '2', '3', '(0.419, 19.0]', '(19.0, 25.0]', '(25.0, 31.8]', '(31.8, 41.0]', '(41.0, 80.0]', 'nan', '(-0.001, 7.854]', '(10.5, 21.679]', '(21.679, 39.688]', '(39.688, 512.329]', '(7.854, 10.5]', '(-0.001, 1.0]', '(1.0, 6.0]']
C = [-0.043281487422643504, 0.5199640685633579, -1.0039159555090957, -0.3644848445981264, 0.6664826567146916, -0.4000843004236305, 0.24183838283179523, -0.04150528802138758, -0.2219732761660194, 0.04505675173309271, 0.4037823142739484, 0.8047930720327325, -0.16862729546072658, -0.25014415313271576, -1.0575407967677335, 0.9062269696875864, 0.04021888607232296, -0.32565170564086077]

# defaultdict自动为不存在的键创建空字典
temp_dict = defaultdict(dict)
for key, sub_key, value in zip(A, B, C):
    temp_dict[key][sub_key] = value

# 转换为目标列表
result = [{k: v} for k, v in temp_dict.items()]
print(result)

两种方式均可生成符合需求的嵌套字典列表,先通过中间字典合并同键数据,再将每个键值对包装为单个字典存入列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:31:19