Иерархический список пар имя-значение в YAML - PullRequest
0 голосов
/ 10 июля 2020

Как лучше всего представить иерархический список пар имя-значение, например, в YAML:

name_1: value_1
  subName1_1: subValue1_1 
  subName1_2: subValue1_2 
name_2: value_2
  subName2_1: subValue2_1 
  subName2_2: subValue2_2 
name_3: value_3
  subName3_1: subValue3_1 
  subName3_2: subValue3_2 
name_4: value_4
  subName4_1: subValue4_1 
  subName4_2: subValue4_2 

Я думаю о следующем, но не уверен, лучший это способ или нет:

-  name_1:
      ID: 1
      subNames:
         -  subName1_1:
               ID: 1
         -  subName1_2:
               ID: 2
-  name_2:
      ID: 2
      subNames:
         -  subName2_1:
               ID: 1
         -  subName2_2:
               ID: 2

или я мог бы также сделать:

-   Name: Name_1
    ID: 1
    SubNames:
      - SubName: subName1_1
        ID: 1
      - SubName: subName1_2
        ID: 2

-   Name: Name_2
    ID: 2
    SubNames:
      - SubName: subName2_1
        ID: 1
      - SubName: subName2_2
        ID: 2

Мне нужно, чтобы имя_ * было уникальным, а также их соответствующие значения, поэтому я бы предпочел что-то, что python может легко использовать для проверки отсутствия дубликатов.

1 Ответ

0 голосов
/ 10 июля 2020

Ну вот и тип ключ значения . Он не является частью стандарта и определен для YAML 1.1, но был разработан для решения этой проблемы. Он предполагает, что у вас в основном есть значение в вашем сопоставлении с именем =, которое содержит значение по умолчанию:

name_1:
  =: value_1
  subName1_1: subValue1_1 
  subName1_2: subValue1_2 
name_2:
  =: value_2
  subName2_1: subValue2_1 
  subName2_2: subValue2_2 
name_3:
  =: value_3
  subName3_1: subValue3_1 
  subName3_2: subValue3_2 
name_4:
  =: value_4
  subName4_1: subValue4_1 
  subName4_2: subValue4_2

В качестве альтернативы вы можете сделать значения списком с одиночными парами key_value:

name_1:
  - value_1
  - subName1_1: subValue1_1 
  - subName1_2: subValue1_2 
name_2:
  - value_2
  - subName2_1: subValue2_1 
  - subName2_2: subValue2_2 
name_3:
  - value_3
  - subName3_1: subValue3_1 
  - subName3_2: subValue3_2 
name_4:
  - value_4
  - subName4_1: subValue4_1 
  - subName4_2: subValue4_2

Вы можете записать это с помощью последовательностей потоков, поскольку YAML позволяет последовательностям потоков содержать одиночные пары ключ-значение, которые будут интерпретироваться как неявные сопоставления:

name_1: [value_1,
  subName1_1: subValue1_1,
  subName1_2: subValue1_2]
name_2: [value_2,
  subName2_1: subValue2_1,
  subName2_2: subValue2_2]
name_3: [value_3,
  subName3_1: subValue3_1,
  subName3_2: subValue3_2]
name_4: [value_4,
  subName4_1: subValue4_1,
  subName4_2: subValue4_2]

Имейте в виду, что когда вы это сделаете, вы не сможете иметь какие-либо узлы блочного стиля в подменю, но другие узлы потока будут в порядке.

...