Я думаю, что ваше оригинальное решение близко, немного сложнее, чем нужно. Обратите внимание, что это решение предполагает, что не будет более одного элемента из dict2, который вы найдете с помощью значения из dict1, это просто порядок, который вы не можете предсказать.
- debug: msg="{{ item.name }}_{{ dict_2 | selectattr('identifier', 'equalto', item.name) | map(attribute='type') | list | join() }}"
with_items: "{{ dict_1 }}"
Если вы МОЖЕТЕ контролировать порядок списков, это становится еще проще.
- debug: msg="{{ item.0.name }}_{{ item.1.type }}"
with_together:
- "{{ dict_1 }}"
- "{{ dict_2 }}"
И если вы можете контролировать порядок и содержимое, и вы хотите иметь все возможные Комбинация двух списков, вы можете сделать это:
- debug: msg="{{ item.0.name }}_{{ item.1.type }}"
with_cartesian:
- "{{ dict_1 }}"
- "{{ dict_2 }}"