sun*_*ica 5 syntax grammar yaml numbered-list
代替
key:
- thisvalue
- thatvalue
- anothervalue
Run Code Online (Sandbox Code Playgroud)
我想拥有
key:
1. thisvalue
2. thatvalue
3. anothervalue
Run Code Online (Sandbox Code Playgroud)
纯粹为了人类可读性,具有相同的解释{key: [thisvalue, thatvalue, anothervalue]}。
这似乎不是基本 YAML 语法的一部分,但是有没有办法实现这一点 - 也许使用YAML 中可能的一些高级技巧?
(我意识到这可以通过将列表写为以下形式来近似:
key:
- 1. thisvalue
- 2. thatvalue
- 3. anothervalue
Run Code Online (Sandbox Code Playgroud)
但这是一个丑陋的黑客,我更喜欢一种解决方案,其中数字具有语义目的,而不仅仅是值文本的一部分,这也需要被解析和删除。)
在 YAML 中无法做到这一点。但是,您可以使用正常的元素嵌套,然后在解析过程中根据这些元素生成数组/列表/字典:
my_numbered_pseudo_list:
1: a
2: b
3: c
...
n: x
Run Code Online (Sandbox Code Playgroud)
当您加载上面的示例时,您将获得带有键“my_numbered_pseudo_list”的字典及其作为包含所有嵌套对的字典的值{"1" : "a", "2" : "b", ..., "n" : "x"}。这是一个示例:
import yaml
doc = '''
list:
1: a
2: b
3: c
4: d
'''
y = yaml.load(doc);
list = []
for i in y['list']:
list.append(y['list'].get(i))
print list
Run Code Online (Sandbox Code Playgroud)
这会给你
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
如果您想确保顺序确实保留在 YAML 文件中,则必须进行一些排序才能获得有序的最终列表,其中保留了 YAML 文件中描述的顺序。
我还看到人们在生成的字典(此处:“列表”)上使用有序哈希调用(例如在我不熟悉的 Ruby 中),因此您可能需要进一步挖掘。
重要的!
请阅读此处和此处。简而言之,为了确保从 YAML 中获得真正有序的列表,您必须按键对作为伪列表的字典进行排序,然后提取值并将其附加到最终列表中。