Создать невозможный дикт из двух списков с условием

У меня много таких строк, хранящихся в первом списке

set bgp x vlan y tags-vlan bgp z,
set bgp x1 vlan y1 tags-vlan bgp z1,
.
.
.
.

и второй список содержит такие значения:

f,
j,
h,
m

из первого списка строк я хочу обрезать его и создать из него словарь, содержащий значения в этой форме:

bgp: x
vlan:y
tags-vlan bgp:z
-----
(to be added) details: p

а затем добавьте в словарь четвертый ключ под названием «детали», значение которого равно третьему значению «h» во втором списке, но добавляйте этот ключ в словарь только тогда, когда каждый раз j == z, что означает второй элемент второй список должен совпадать со значением третьего ключа во вновь созданном словаре z, и оба имеют числовое значение, а затем добавить h в словарь с подробностями имени ключа.

результатом является словарь, подобный этому, со значением h, добавляемым с условием, когда z == j

bgp: x
vlan:y
tags-vlan bgp:z
details: h

Привет и добро пожаловать в SO. Пожалуйста, отредактируйте свой вопрос и правильно отформатируйте код/вывод/примеры. Проверьте кнопки в верхней части редактора и кнопку справки для получения дополнительной информации. Спасибо.

Zeitounator 21.11.2022 12:09
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Given the strings

  s1: |-
    set bgp x vlan y tags-vlan bgp z,
    set bgp x1 vlan y1 tags-vlan bgp z1,
    set bgp x2 vlan y2 tags-vlan bgp j
  s2: |-
    f,
    j,
    h,
    m

  1. Разделите линии
  l1: "{{ s1|split('\n')|join()|split(',') }}"
  l2: "{{ s2|split('\n')|join()|split(',') }}"

дает

  l1:
  - set bgp x vlan y tags-vlan bgp z
  - set bgp x1 vlan y1 tags-vlan bgp z1
  - set bgp x2 vlan y2 tags-vlan bgp j

  l2:
  - f
  - j
  - h
  - m
  1. Используя условие

Если

 'the second item of the second list' == 'the value of the third key'

Добавить

 {'details':  'third item of the second list'}

Создайте структуру

    s3: |
      {% for i in l1 %}
      {% set a=i.split(' ') %}
      - {{ a.1 }}: {{ a.2 }}
        {{ a.3 }}: {{ a.4 }}
        {{ a.5 }} {{ a.6 }}: {{ a.7 }}
      {% if a.7 == l2.1 %}
        details: {{ l2.2 }}
      {% endif %}
      {% endfor %}

дает

  s3: |-
  - bgp: x
    tags-vlan bgp: z
    vlan: y
  - bgp: x1
    tags-vlan bgp: z1
    vlan: y1
  - bgp: x2
    details: h
    tags-vlan bgp: j
    vlan: y2
  1. Преобразовать строку в yaml
  l3: "{{ s3|from_yaml }}"

дает список словарей

  l3:
  - bgp: x
    tags-vlan bgp: z
    vlan: y
  - bgp: x1
    tags-vlan bgp: z1
    vlan: y1
  - bgp: x2
    details: h
    tags-vlan bgp: j
    vlan: y2

Example of a complete playbook for testing

- hosts: localhost

  vars:

    s1: |-
      set bgp x vlan y tags-vlan bgp z,
      set bgp x1 vlan y1 tags-vlan bgp z1,
      set bgp x2 vlan y2 tags-vlan bgp j
    s2: |-
      f,
      j,
      h,
      m

    l1: "{{ s1|split('\n')|join()|split(',') }}"
    l2: "{{ s2|split('\n')|join()|split(',') }}"
    s3: |
      {% for i in l1 %}
      {% set a=i.split(' ') %}
      - {{ a.1 }}: {{ a.2 }}
        {{ a.3 }}: {{ a.4 }}
        {{ a.5 }} {{ a.6 }}: {{ a.7 }}
      {% if a.7 == l2.1 %}
        details: {{ l2.2 }}
      {% endif %}
      {% endfor %}
    l3: "{{ s3|from_yaml }}"

  tasks:

    - debug:
        var: l1
    - debug:
        var: l2
    - debug:
        var: s3
    - debug:
        var: l3

Другие вопросы по теме