List of dicts => dict of lists

Hi

I'm struggling with something seemingly simple.
I have this list:

instances:
  - id: i-0fe48c061f6a323a0
    type: web
  - id: i-0403e39813defda31
    type: web
  - id: i-0442f13b528e5e1c6
    type: proxy
  - id: i-0ebea75d008becaa6
    type: proxy
  - id: i-067c5d985c194e036
    type: db
  - id: i-0679e87f06d0cf9a2
    type: db

Which I'd like to turn into this structure:

instances:
  web:
    - id: i-0fe48c061f6a323a0
    - id: i-0403e39813defda31
  proxy:
    - id: i-0442f13b528e5e1c6
    - id: i-0ebea75d008becaa6
  db:
    - id: i-067c5d985c194e036
    - id: i-0679e87f06d0cf9a2

But I can't figure out how to do this...

Are you sure you need the id in the list as it's redundant and without it is very simple with selectattr and map.

The task below does the job

    - set_fact:
        instances2: "{{ instances2|
                        default({})|
                        combine({item.0: item.1|
                                 json_query('.{id: id}')}) }}"
      loop: "{{ instances|groupby('type') }}"

Cheers,

  -vlado

Here is another way. Although I like vladimir Botka’s solution.