我想将以下输出写入YAML文件:
'0':[]
'1':[]
'2':[]
'3':[]
...
'100':[]
我可以这样做:
import yaml
d = {str(i):[] for i in range(101)}
with open('result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False)
但是订单不会保留。如何获得所需的输出?
谢谢!
答案 0 :(得分:0)
YAML定义映射键的顺序不得传达内容信息。因此,在使用YAML时,一定不要依赖于映射键的顺序。另请参见this discussion。如果您要执行的操作取决于键的顺序,则应使用列表,例如:
import yaml
d = [{str(i): []} for i in range(101)]
with open('result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False)
哪个给你:
- '0': []
- '1': []
- '2': []
保留键的顺序,因为您将键-值对包装在列表中。
如果您确实需要按照所需的顺序编写映射,则仍然可以使用低级事件API:
import yaml
from yaml.events import *
d = [StreamStartEvent(), DocumentStartEvent(),
MappingStartEvent(anchor=None, tag=u'tag:yaml.org,2002:map', implicit=True)]
for i in range(101):
d.extend([ScalarEvent(anchor=None, tag=u'tag:yaml.org,2002:str', value=str(i),
implicit=(True, True)),
SequenceStartEvent(anchor=None, tag=u'tag:yaml.org,2002:seq', implicit=True),
SequenceEndEvent()])
d.extend([MappingEndEvent(), DocumentEndEvent(), StreamEndEvent()])
with open('result.yml', 'w') as yaml_file:
yaml.emit(d, yaml_file)