Pertanyaan Bagaimana cara menggabungkan array YAML?


Saya ingin menggabungkan array dalam YAML, dan memuatnya melalui ruby ​​-

some_stuff: &some_stuff
 - a
 - b
 - c

combined_stuff:
  <<: *some_stuff
  - d
  - e
  - f

Saya ingin memiliki gabungan array sebagai [a,b,c,d,e,f]

Saya menerima kesalahan: tidak menemukan kunci yang diharapkan saat mem-parsing pemetaan blok

Bagaimana cara menggabungkan array dalam YAML?


32
2018-06-06 20:33


asal


Jawaban:


Konteks

Posting ini mengasumsikan konteks berikut:

  • python 2.7
  • python YAML parser

Masalah

lfender6445 ingin menggabungkan dua atau lebih daftar dalam file YAML, dan memilikinya daftar gabungan muncul sebagai satu daftar tunggal saat diuraikan.

Larutan

Ini dapat diperoleh hanya dengan menugaskan jangkar YAML ke pemetaan, di mana daftar yang diinginkan muncul sebagai elemen anak dari pemetaan. Dalam contoh di bawah ini kami memiliki tiga pemetaan (list_one, list_two, list_three) dan tiga jangkar dan alias yang merujuk pada pemetaan ini jika sesuai.

Ketika file YAML dimuat dalam program, kami mendapatkan daftar yang kami inginkan, tetapi mungkin memerlukan sedikit modifikasi setelah pemuatan (lihat perangkap di bawah).

Contoh

File YAML asli

  list_one: & id001
   - Sebuah
   - b
   - c

  list_two: & id002
   - e
   - f
   - g

  list_three: & id003
   - h
   - i
   - j

  list_combined:
      - * id001
      - * id002
      - * id003

Hasil setelah YAML.safe_load

## list_combined
  [
    [
      "Sebuah",
      "b",
      "c"
    ],
    [
      "e",
      "f",
      "g"
    ],
    [
      "h",
      "saya",
      "j"
    ]
  ]

Perangkap

  • pendekatan ini menghasilkan daftar daftar bersarang, yang mungkin bukan output yang diinginkan, tetapi ini dapat diproses setelah menggunakan meratakan metode
  • itu peringatan biasa untuk jangkar dan alias YAML berlaku untuk pesanan keunikan dan pernyataan

Kesimpulan

Pendekatan ini memungkinkan pembuatan daftar yang digabungkan dengan menggunakan fitur alias dan anchor dari YAML.

Meskipun hasil keluarannya adalah daftar daftar yang disarangkan, ini dapat dengan mudah diubah menggunakan flatten metode.

Lihat juga


9
2018-06-11 02:51



Ini tidak akan berfungsi:

  1. penggabungan hanya didukung oleh spesifikasi YAML untuk pemetaan dan bukan untuk urutan
  2. Anda benar-benar mencampur berbagai hal dengan memiliki kunci gabungan << diikuti oleh pemisah kunci / nilai : dan nilai yang menjadi referensi dan kemudian lanjutkan dengan daftar pada level indentasi yang sama

Ini tidak benar YAML:

combine_stuff:
  x: 1
  - a
  - b

Jadi contoh sintaks Anda bahkan tidak akan masuk akal sebagai proposal perpanjangan YAML.

Jika Anda ingin melakukan sesuatu seperti ini, cobalah untuk membuat nilainya combined_stuff beberapa jenis khusus yang Anda tentukan dengan tag YAML, sehingga objek yang dipakai untuk jenis tersebut tahu cara menafsirkan elemen dan mengganti elemen tersebut dengan semua elemen dari some_stuff.


9
2018-06-06 13:55



Anda bisa menggabungkan pemetaan lalu mengubah kunci mereka menjadi daftar, di bawah kondisi ini:

  • jika Anda menggunakan tempering dan jinja2
  • jika pesanan barang tidak penting
some_stuff: &some_stuff
 a:
 b:
 c:

combined_stuff:
  <<: *some_stuff
  d:
  e:
  f:

{{ combined_stuff | list }}

0
2018-01-19 13:35