Estou tentando comparar 2 listas para obter a diferença e também duplicatas. Exemplo:
- name: Debug
hosts: "localhost"
gather_facts: no
connection: local
vars:
list1:
- {name: aBC_SOMEITEM-A01_dEF, type: random, policy: one}
- {name: aBC_SOMEITEM-A02_dEF, type: random, policy: two}
- {name: aBC_SOMEITEM-A03_dEF, type: random, policy: three}
list2:
- {name: "SOMEITEM-A01", type: "random", policy: "one"}
- {name: "SOMEITEM-A02", type: "random", policy: "two"}
- {name: "SOMEITEM-A03", type: "random", policy: "three"}
- {name: "SOMEITEM-A03", type: "random", policy: "three"}
- {name: "SOMEITEM-A04", type: "random", policy: "four"}
list3: "{{ list1 | map('ansible.builtin.regex_replace', 'aBC_|_dEF', '') | list }}"
tasks:
- debug:
msg: |
{{ list1 | to_yaml(default_flow_style=none) }}
{{ list2 | to_yaml(default_flow_style=none) }}
{{ list3 | to_yaml(default_flow_style=none) }}
{{ list2 | difference(list3) | to_yaml(default_flow_style=none) }}
list3
A saída de após o map('regex_replace')
filtro fica assim:
['{''name'': ''SOMEITEM-A01'', ''type'': ''random'', ''policy'': ''one''}', '{''name'':
''SOMEITEM-A02'', ''type'': ''random'', ''policy'': ''two''}', '{''name'': ''SOMEITEM-A03'',
''type'': ''random'', ''policy'': ''three''}']
- Como faço para normalizar list3 para que a saída resultante da diferença seja
- {name: SOMEITEM-A04, policy: three, type: random}
list2
tem um dict duplicado, como posso encontrar a duplicata? Por exemplo
- {name: "SOMEITEM-A03", type: "random", policy: "three"}
Eu estava olhando para as duas respostas daqui, mas não consegui descobrir - Ansible: Como obter itens duplicados da lista?
(Não me importo de escrever plug-ins de filtro personalizados para fazer isso, pois o conjunto de dados pode ser muito grande)