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

如何将键为元组的嵌套字典转换为指定格式的Pandas DataFrame

问题原因

你的代码只遍历到嵌套字典的第二层(user、id维度),直接把第三层的字典整体作为值存入了Col3字段,没有对元组键和分数值做拆分,因此无法生成w1、w2、score三个独立字段。

解决方法

方法一:直接遍历最内层生成目标结构(推荐)

直接在生成Series时遍历到最内层的单词元组和分数字段,一步生成目标结构:

import pandas as pd

user_dict = {'user1': {'id1': {('word1', 'word2'): 0.99, ('word3', 'word4'): 0.16},
                       'id2': {('word5', 'word6'): 0.73, ('word7', 'word8'): 0.69}},
             'user2': {'id3': {('word9', 'word10'): 0.59, ('word11', 'word12'): 0.13},
                       'id4': {('word13', 'word14'): 0.41, ('word14', 'word15'): 0.74}}}

# 三层遍历生成对应维度的Series
s = pd.Series({
    (user, id_, w1, w2): score
    for user, id_map in user_dict.items()
    for id_, word_map in id_map.items()
    for (w1, w2), score in word_map.items()
}).rename_axis(['user', 'id', 'w1', 'w2']).reset_index(name='score')

# 如果你需要示例中合并重复user、id值的显示效果,添加以下代码即可(仅修改显示样式,不改变实际存储数据)
s = s.set_index(['user', 'id'])

方法二:基于你现有生成的df做二次拆分

如果不想修改原有遍历逻辑,可以对已经生成的带Col3字段的df做后续处理:

# 把Col3的字典转为键值对列表后拆分到多行
df = df.explode('Col3')
# 拆分元组得到w1、w2,提取对应分数
df[['w1', 'w2']] = df['Col3'].apply(lambda x: pd.Series(x[0]))
df['score'] = df['Col3'].apply(lambda x: x[1])
# 删除冗余的Col3列
df = df.drop('Col3', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:04