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

如何以Pythonic方式从嵌套字典列表生成指定结构的DataFrame

从嵌套字典列表结构生成指定格式的DataFrame

给定如下结构的嵌套字典:

data1 = {
    'AI': [3, {'G': 0.0, 'C': 0.31666666666666665, 'L': 0.3333333333333333, 'U': 0.0, 'J': 0.0, 'W': 0.0, 'O1': 0.3333333333333333, 'O2': 0.016666666666666666, 'T1': 0.0, 'T2': 0.0, 'N': 0.0, 'B': 0.0, 'R': 0.0, 'D': 0.0, 'M': 0.0}, [0.3333333333333333, 0.3333333333333333, 0.3333333333333333]],
    'CY': [96, {'G': 0.010416666666666666, 'C': 0.0, 'L': 0.46875, 'U': 0.0, 'J': 0.010416666666666666, 'W': 0.0, 'O1': 0.41666666666666663, 'O2': 0.020833333333333332, 'T1': 0.0, 'T2': 0.07291666666666666, 'N': 0.0, 'B': 0.0, 'R': 0.0, 'D': 0.0, 'M': 0.0}, [0.3333333333333333, 0.3333333333333333, 0.3333333333333333]],
    'PY': [127, {'G': 0.0, 'C': 0.0, 'L': 0.42276422764227645, 'U': 0.008130081300813009, 'J': 0.0, 'W': 0.0, 'O1': 0.4552845528455285, 'O2': 0.04065040650406505, 'T1': 0.0, 'T2': 0.04878048780487805, 'N': 0.020325203252032523, 'B': 0.0040650406504065045, 'R': 0.0, 'D': 0.0, 'M': 0.0}, [0.3333333333333333, 0.3333333333333333, 0.3333333333333333]],
    'SR': [1, {'G': 0.0, 'C': 0.0, 'L': 0.0, 'U': 0.0, 'J': 0.0, 'W': 0.0, 'O1': 0.0, 'O2': 1.0, 'T1': 0.0, 'T2': 0.0, 'N': 0.0, 'B': 0.0, 'R': 0.0, 'D': 0.0, 'M': 0.0}, [0.33333333333333337, 0.33333333333333337, 0.33333333333333337]],
    'CV': [119, {'G': 0.03022827836191888, 'C': 0.09570154943733565, 'L': 0.1787022898077257, 'U': 0.059038954704106396, 'J': 0.01667767082036904, 'W': 0.0008338835410184519, 'O1': 0.46697478297033307, 'O2': 0.03193607185392467, 'T1': 0.0, 'T2': 0.08238175915743774, 'N': 0.0208470885254613, 'B': 0.00833883541018452, 'R': 0.0, 'D': 0.00833883541018452, 'M': 0.0}, [0.33216690905268464, 0.3354010574206815, 0.3324320335266338]],
    'BS': [65, {'G': 0.024576271186440683, 'C': 0.1033898305084746, 'L': 0.08576271186440679, 'U': 0.37796610169491535, 'J': 0.016949152542372885, 'W': 0.0, 'O1': 0.21864406779661022, 'O2': 0.07271186440677968, 'T1': 0.050847457627118654, 'T2': 0.013559322033898308, 'N': 0.016949152542372885, 'B': 0.0016949152542372885, 'R': 0.0, 'D': 0.016949152542372885, 'M': 0.0}, [0.3346524499339513, 0.3346524499339513, 0.33069510013209746]],
    'RD': [24, {'G': 0.041666666666666664, 'C': 0.0, 'L': 0.29166666666666663, 'U': 0.0, 'J': 0.0, 'W': 0.0, 'O1': 0.5833333333333333, 'O2': 0.041666666666666664, 'T1': 0.0, 'T2': 0.0, 'N': 0.041666666666666664, 'B': 0.0, 'R': 0.0, 'D': 0.0, 'M': 0.0}, [0.3333333333333333, 0.3333333333333333, 0.3333333333333333]]
}

其通用结构为:

d1 = {
    A1: [n1, {B1: m1, B2: m2, ...}, [p1, q1, r1]],
    ...
}

需要生成一个DataFrame,要求:

  • 以字典的顶层键(A类键)作为第一列(行标识)
  • 以内部字典的键(B类键)作为列名
  • 内部字典的对应值(m值)作为单元格内容

已知所有条目的B类键均一致,求符合Python风格的实现方式。


解决方案

最符合Python风格的实现方式是利用字典推导式提取所需的内层字典,再结合pandas的from_dict方法快速生成DataFrame,步骤如下:

  1. 提取每个顶层键对应的内层字典(即列表中的第二个元素,索引为1):
import pandas as pd

# 提取目标数据:顶层键 -> 内层字典
filtered_data = {key: value[1] for key, value in data1.items()}
  1. 生成DataFrame,并将顶层键设置为第一列:
# 从字典生成DataFrame,orient='index'表示用字典键作为行索引
df = pd.DataFrame.from_dict(filtered_data, orient='index')
# 将行索引转为第一列,并命名列名
df = df.reset_index().rename(columns={'index': 'A类键'})

代码说明

  • 字典推导式{key: value[1] for key, value in data1.items()}简洁高效,直接过滤掉不需要的n值和[p,q,r]列表,只保留需要的内层字典数据,符合Python的简洁性原则。
  • pd.DataFrame.from_dict(filtered_data, orient='index')直接将字典的键作为行索引,值作为行数据,自动对齐所有B类键作为列名。
  • reset_index()将行索引转为普通列,rename方法给该列设置明确的名称,满足“顶层键作为第一列”的需求。

最终效果

生成的DataFrame结构如下(示例片段):

A类键GCL...
AI0.00.3166670.333333...
CY0.0104170.00.46875...
...............

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:18:08