作为 YAML 数组的编号列表

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)

但这是一个丑陋的黑客,我更喜欢一种解决方案,其中数字具有语义目的,而不仅仅是值文本的一部分,这也需要被解析和删除。)

rba*_*dar 4

在 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 中获得真正有序的列表,您必须按键对作为伪列表的字典进行排序,然后提取值并将其附加到最终列表中。