validator tutorial lib español yaml

tutorial - ¿Cómo combinar matrices YAML?



yaml validator (3)

Contexto

Esta publicación asume el siguiente contexto:

  • Python 2.7
  • Analizador de Python YAML

Problema

lfender6445 desea combinar dos o más listas dentro de un archivo YAML, y hacer que esas listas fusionadas aparezcan como una sola lista singular cuando se analizan.

Solución

Esto se puede obtener simplemente asignando anclajes YAML a las asignaciones, donde las listas deseadas aparecen como elementos secundarios de las asignaciones. En el siguiente ejemplo, tenemos tres asignaciones ( list_one, list_two, list_three ) y tres anclas y alias que hacen referencia a estas asignaciones cuando corresponde.

Cuando el archivo YAML se carga en el programa, obtenemos la lista que queremos, pero puede requerir una pequeña modificación después de la carga (ver las dificultades a continuación).

Ejemplo

Archivo original YAML

list_one: &id001 - a - b - c list_two: &id002 - e - f - g list_three: &id003 - h - i - j list_combined: - *id001 - *id002 - *id003

Resultado después de YAML.safe_load

## list_combined [ [ "a", "b", "c" ], [ "e", "f", "g" ], [ "h", "i", "j" ] ]

Trampas

  • este enfoque produce una lista anidada de listas, que puede no ser el resultado exacto deseado, pero puede ser postprocesado utilizando el método de aplanar
  • las advertencias habituales de los anclajes y alias de YAML se aplican a la unicidad y orden de declaración

Conclusión

Este enfoque permite la creación de listas combinadas mediante el uso de la función de alias y ancla de YAML.

Aunque el resultado de salida es una lista anidada de listas, esto se puede transformar fácilmente utilizando el método de flatten .

Ver también

Me gustaría fusionar matrices en YAML, y cargarlas a través de ruby ​​-

some_stuff: &some_stuff - a - b - c combined_stuff: <<: *some_stuff - d - e - f

Me gustaría tener el conjunto combinado como [a,b,c,d,e,f]

Recibo el error: no encontré la clave esperada mientras analizaba un mapeo de bloque

¿Cómo combino matrices en YAML?


Esto no va a funcionar:

  1. merge solo es compatible con las especificaciones YAML para mapeos y no para secuencias
  2. está mezclando cosas por completo con una combinación de teclas << seguida del separador de clave / valor : y un valor que es una referencia y luego continúa con una lista en el mismo nivel de sangría

Esto no es correcto YAML:

combine_stuff: x: 1 - a - b

Entonces, su sintaxis de ejemplo no tendría sentido como una propuesta de extensión de YAML.

Si desea hacer algo como esto, intente hacer que el valor para el combined_stuff un tipo especial que especifique con una etiqueta YAML, de modo que el objeto instanciado para ese tipo sepa cómo interpretar los elementos y reemplace ese elemento con todos esos de some_stuff .


Puede fusionar asignaciones y luego convertir sus claves en una lista, en estas condiciones:

  • si estás utilizando jinja2 y plantillas
  • si el orden del artículo no es importante

some_stuff: &some_stuff a: b: c: combined_stuff: <<: *some_stuff d: e: f: {{ combined_stuff | list }}