взято из вашего примера.

я есть данные, которые представлены следующим образом:

 {
    "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 }}"

Чтобы подробнее остановиться на проблеме, которую я пытаюсь решить немного больше: учитывая индекс, я хочу найти ключ, с которым он связан. Целевая структура позволила бы мне сделать это немного проще, я думаю. таким образом, было бы достаточно указания ключа к списку индекса или указания индекса к ключу.

Спасибо за любой совет ..

Ответы на вопрос(1)

Ваш ответ на вопрос