可以使用Ansible的set_fact模块以及Jinja2模板语言来实现按属性值合并2个字典列表。具体步骤如下:
list1:
- {'name': 'John', 'age': '25', 'gender': 'M'}
- {'name': 'Alice', 'age': '30', 'gender': 'F'}
list2:
- {'name': 'Bob', 'age': '28', 'gender': 'M'}
- {'name': 'Jane', 'age': '35', 'gender': 'F'}
- set_fact:
dict1: "{{ list1 }}"
dict2: "{{ list2 }}"
- set_fact:
merged_list: |
{% set merged = [] %}
{% for i2 in dict2 %}
{% for i1 in dict1 %}
{% if i1['gender'] == i2['gender'] %}
{% set d = i1.copy() %}
{% set d2 = i2.copy() %}
{% set _ = d.update(d2) %}
{% set _ = merged.append(d) %}
{% endif %}
{% endfor %}
{% endfor %}
{{ merged }}
以上Jinja2模板语言中,首先定义了一个空列表merged作为合并后的新字典列表,然后通过2个for循环依次遍历dict2和dict1中的每个元素,判断其gender属性是否相同。如果相同,则将2个字典合并成一个新字典,并加入到merged列表中。最后返回