У меня много таких строк, хранящихся в первом списке
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
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
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
Если
'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
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
Привет и добро пожаловать в SO. Пожалуйста, отредактируйте свой вопрос и правильно отформатируйте код/вывод/примеры. Проверьте кнопки в верхней части редактора и кнопку справки для получения дополнительной информации. Спасибо.