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

如何从Pandas DataFrame生成指定结构的嵌套字典?

实现目标嵌套字典的几种方法

1. 基础循环构建

如果已经把各列转成了列表,直接通过循环遍历并分组构建字典即可,这是最直观的方式:

teams = ['A', 'A', 'B', 'B', 'C', 'C']
xy = ['X', 'Y', 'X', 'Y', 'X', 'Y']
percentages = ['80%', '20%', '70%', '30%', '60%', '40%']

result = {}
for team, x_y, p in zip(teams, xy, percentages):
    # 如果团队不在结果字典中,先初始化子字典
    if team not in result:
        result[team] = {}
    # 给当前团队的X/Y赋值对应百分比
    result[team][x_y] = p

执行后就能得到你想要的嵌套结构:{'A': {'X': '80%', 'Y': '20%'}, 'B': {'X': '70%', 'Y': '30%'}, 'C': {'X': '60%', 'Y': '40%'}}

2. 用collections.defaultdict简化代码

借助collections模块的defaultdict,可以省去判断团队是否存在的步骤,代码更简洁:

from collections import defaultdict

teams = ['A', 'A', 'B', 'B', 'C', 'C']
xy = ['X', 'Y', 'X', 'Y', 'X', 'Y']
percentages = ['80%', '20%', '70%', '30%', '60%', '40%']

result = defaultdict(dict)
for team, x_y, p in zip(teams, xy, percentages):
    result[team][x_y] = p

# 若需要转为普通字典而非defaultdict,执行:result = dict(result)

3. 基于Pandas的高效实现(推荐)

既然你提到用.tolist()处理列数据,说明大概率是用Pandas读取的表格。这种情况下,直接用Pandas的分组功能可以一步到位,无需手动处理列表:

import pandas as pd

# 示例DataFrame,替换为你实际读取的表格数据
df = pd.DataFrame({
    'Team': ['A', 'A', 'B', 'B', 'C', 'C'],
    'X or Y': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Percentage': ['80%', '20%', '70%', '30%', '60%', '40%']
})

# 分组后直接生成嵌套字典
result = df.groupby('Team').apply(
    lambda group: group.set_index('X or Y')['Percentage'].to_dict()
).to_dict()

为什么直接用zip失败?

你尝试的zip方法会生成包含(team, x_y, p)的元组序列,但如果直接用dict()转换,重复的team键会被最后一次出现的值覆盖,无法实现分组嵌套的结构。必须通过分组逻辑,将同一团队的X/Y和百分比对应起来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:32:52