如何从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
相关产品推荐
相关产品推荐

