Acoplar y filtrar una estructura compleja en ansible - dict of list of dict
Tengo datos que se representan de esta manera:
{
"key1": [{
"name": "some name1",
"index": "some idx1"
},
{
"name": "some name2",
"index": "some idx2"
},
{
"name": "some name3",
"index": "some idx3"
}],
"key2": [{
"name": "some name4",
"index": "some idx4"
},
{
"name": "some name5",
"index": "some idx5"
},
{
"name": "some name6",
"index": "some idx6"
}]
}
Me gustaría convertir lo anterior a esto, que es básicamente un diccionario con la clave existente a una lista de los índices.
{
"key1": [some idx1, some idx2, some idx3],
"key2": [some idx4, some idx5, some idx6]
}
He visto un par de ejemplos usando map, extract y combine, pero todavía no pude hacerlo funcionar. Sin embargo, pude hacerlo usando jinja, el código está debajo. Mi pregunta es, ¿cuál es la mejor manera de lograr lo anterior? ¿Cuál es la mejor práctica recomendada con respecto a este tipo de cosas? ¿Hay alguna razón por la cual no deberían realizarse operaciones más complejas usando jinja2 (dado que los revestimientos que he visto son demasiado complejos y probablemente serían difíciles de entender para otros) fuera, lo que hace que el guión sea difícil de mantener).
Aquí está el código que hace el truco, pero de nuevo, no estoy seguro de si la mejor manera de lograr esto:
- hosts: local
tags: test1
gather_facts: False
vars:
dict1:
key1:
- { name: some name1, index: some idx1 }
- { name: some name2, index: some idx2 }
- { name: some name3, index: some idx3 }
key2:
- { name: some name4, index: some idx4 }
- { name: some name5, index: some idx5 }
- { name: some name6, index: some idx6 }
tasks:
- name: "dict of list of dict"
set_fact:
index_map: |
{% set map = dict() %}
{% for k,v in dict1.iteritems() %}
{% set x=map.__setitem__(k, []) %}
{% for item in v %}
{% set x= map[k].append(item.name) %}
{% endfor %}
{% endfor %}
{{ map }}
- debug:
msg: "{{ index_map }}"
Para ampliar el problema, estoy tratando de resolver un poco más: dado un 'índice', quiero encontrar la clave con la que está asociado. La estructura objetivo me permitiría hacerlo un poco más fácil, creo. entonces, ya sea un dict de clave para una lista de índice, o un dict de índice para clave sería suficiente.
Gracias por cualquier consejo ...