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

如何将加载后的嵌套Python字典按指定格式写入CSV文件?

嵌套字典转指定格式CSV的解决方法

问题场景

你用np.save()保存了Python字典,加载时必须设置allow_pickle=True才能恢复,最终得到如下嵌套结构的字典:

values = {(0, 0, 0): {0: -1421.05, 1: -1578.94, 2: -1473.65, 3: -1471.21},
          (0, 0, 1): {0: -142, 1: -157, 2: -147, 3: -147},
          (0, 0, 2): {0: 19, 1: 15, 2: 10, 3: 12}}

想要把它导出成指定格式的CSV/文本文件:

0         1        2       3
(0,0,0):-1421.05,-1578.94,-1473.65,-1471.21
(0,0,1):-142,     -157,     -147,   -147  
(0,0,2):19,        15,        10,    12

但直接用pd.DataFrame(policy)再导出的代码会报错,或者输出完全不符合预期。

为什么原代码不行

直接把嵌套字典传给pd.DataFrame(),会把外层字典的键(比如(0,0,0))当成列名,内层字典的键(比如0、1、2、3)当成行索引,和你要的结构完全相反,自然出问题。

解决办法

方法1:用Pandas调整结构后导出

先把字典转成DataFrame,再转置调整行列,最后格式化索引:

import pandas as pd

# 先转成DataFrame,此时外层键是列,内层键是行
df = pd.DataFrame(values)
# 转置后,外层键变行索引,内层键变列
df = df.T
# 把行索引改成"(x,y,z):"的格式
df.index = [f"{idx}:" for idx in df.index]

# 如果要标准CSV格式(逗号分隔,对齐靠阅读器处理)
df.to_csv('saved-policy.csv', index=True, header=True)

# 如果要严格对齐的文本格式(和示例完全一致)
formatted_content = df.to_string(header=True, index=True, col_space=10)
with open('saved-policy.txt', 'w', encoding='utf-8') as f:
    f.write(formatted_content)

注:严格对齐的格式更偏向文本文件,标准CSV本身不负责显示对齐,只保证数据分隔。

方法2:手动写入(不依赖Pandas)

如果不想用Pandas,可以直接遍历字典构建每行内容,完全自定义格式:

# 获取列名(假设所有内层字典的键都一致)
col_names = list(next(iter(values.values())).keys())
# 构建表头,前面加空格对齐
header = " " * 10 + ",".join(f"{col:>8}" for col in col_names) + "\n"

# 构建每一行数据
rows = []
for outer_key, inner_dict in values.items():
    row_head = f"{outer_key}:"
    row_vals = ",".join(f"{val:>8}" for val in inner_dict.values())
    rows.append(row_head + row_vals + "\n")

# 写入文件
with open('saved-policy.txt', 'w', encoding='utf-8') as f:
    f.write(header)
    f.writelines(rows)

这个方法能精准复刻你给出的示例格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:47