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

如何用Python生成指定结构的紧凑列表格式YAML文件

如何修改Python代码生成期望的YAML格式?

问题场景

你编写了以下Python代码保存数据到YAML文件:

dict = {
    i: [{'cam_R_m2c': cam_R_m2c},
        {'cam_T_m2c': cam_T_m2c},
        {'obj_bb': [0, 0, 0, 0]},
        {'obj_id': 0}
        ]
}
# list = [{'cam_R_m2c':cam_R_m2c},{'cam_T_m2c':cam_T_m2c},{'obj_bb': [0,0,0,0]},{'obj_id': 0}]
with open('./Data_collection/gt.yml','a+') as f:
    yaml.dump(dict,f)

当前生成的YAML格式不符合预期:

0:
- cam_R_m2c:
  - 0.999988853931427
  - -0.0014960498083382845
  - -0.004474445711821318
  - 0.0014844260876998305
  - 0.9999955296516418
  - -0.0025999906938523054
  - 0.004478315357118845
  - 0.0025933198630809784
  - 0.9999865889549255
- cam_T_m2c:
  - 0.014818123541772366
  - 9.016657713800669e-05
  - 0.00015443217125721276
- obj_bb:
  - 0
  - 0
  - 0
  - 0
- obj_id: 0

你期望生成的YAML格式为:

0:
- cam_R_m2c: [0.09630630, 0.99404401, 0.05100790, 0.57332098, -0.01350810, -0.81922001, -0.81365103, 0.10814000, -0.57120699]
  cam_t_m2c: [-105.35775150, -117.52119142, 1014.87701320]
  obj_bb: [244, 150, 44, 58]
  obj_id: 1

修改方案

需要从数据结构调整和YAML输出参数设置两方面修改:

1. 修正数据结构

当前代码中,i对应的是包含4个独立字典的列表,这会导致YAML生成4个列表项。你需要把这些键值对合并到同一个字典中,再放在列表里:

# 避免使用内置类型名dict作为变量名
data = {
    i: [{
        'cam_R_m2c': cam_R_m2c,
        'cam_T_m2c': cam_T_m2c,
        'obj_bb': [0, 0, 0, 0],
        'obj_id': 0
    }]
}

2. 设置YAML输出参数

PyYAML默认会把长列表展开为多行,需要设置default_flow_style=None让列表自动以方括号的行内格式输出:

with open('./Data_collection/gt.yml','a+') as f:
    yaml.dump(data, f, default_flow_style=None)

完整修改后的代码

# 假设cam_R_m2c和cam_T_m2c已经提前定义
data = {
    i: [{
        'cam_R_m2c': cam_R_m2c,
        'cam_T_m2c': cam_T_m2c,
        'obj_bb': [0, 0, 0, 0],
        'obj_id': 0
    }]
}

with open('./Data_collection/gt.yml','a+') as f:
    yaml.dump(data, f, default_flow_style=None)

说明

  • default_flow_style=None:让PyYAML根据内容长度自动选择格式,短结构用行内(方括号),长结构保持块格式,正好匹配你期望的输出。
  • 避免用dict作为变量名,防止覆盖Python内置的dict类型引发意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:04:51