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

如何让Python中yaml.dump({1})输出"? 1"而非"1: null"?

问题

执行以下Python代码:

import yaml

data = {1}

print(yaml.dump(data))

得到的输出是:

!!set
1: null

能否让输出变为:

!!set
? 1

我认为这应该可以实现,因为执行以下代码:

import yaml

print(yaml.safe_load("""
!!set 
? 1"""))

输出结果是:

{1}
解决方案

可以通过自定义YAML的Representer实现这种输出格式。PyYAML默认会把集合(set)元素以key: null的形式序列化,我们可以重写集合的表示逻辑,让它使用? key的格式输出。

具体代码如下:

import yaml

def represent_set(dumper, data):
    return dumper.represent_mapping('tag:yaml.org,2002:set', 
                                    {item: None for item in data},
                                    flow_style=False)

# 注册自定义表示器
yaml.add_representer(set, represent_set)

# 测试
data = {1}
print(yaml.dump(data))

执行这段代码后,输出会变成:

!!set
? 1

原理说明:

  • 重写set类型的YAML表示器,序列化时调用represent_mapping方法,并传入flow_style=False生成块级格式输出。
  • 内部虽仍使用{item: None}的结构,但PyYAML会自动将值为None的映射项简化为? item的形式,匹配预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:12:37