взято из вашего примера.
я есть данные, которые представлены следующим образом:
{
"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"
}]
}
Я хотел бы преобразовать вышеупомянутое в это, которое является в основном словарем с существующим ключом к списку индексов.
{
"key1": [some idx1, some idx2, some idx3],
"key2": [some idx4, some idx5, some idx6]
}
Я видел пару примеров, использующих карту, извлечение и объединение, но пока не смог заставить его работать. Однако я смог сделать это с помощью jinja, код ниже. Мой вопрос заключается в том, каков наилучший способ для достижения вышеизложенного. Какова рекомендуемая лучшая практика в отношении такого рода вещей - есть ли причина, по которой более сложные операции не следует выполнять с использованием jinja2 (учитывая, что одни из найденных мной лайнеров слишком сложны и, вероятно, другим будет сложно понять out - следовательно, трудно поддерживать сценарий).
Вот код, который делает трюк, но, опять же, не уверен, что лучший способ сделать это:
- 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 }}"
Чтобы подробнее остановиться на проблеме, которую я пытаюсь решить немного больше: учитывая индекс, я хочу найти ключ, с которым он связан. Целевая структура позволила бы мне сделать это немного проще, я думаю. таким образом, было бы достаточно указания ключа к списку индекса или указания индекса к ключу.
Спасибо за любой совет ..