# data conversion question

**URL:** <https://forum.ansible.com/t/data-conversion-question/36737>\
**Category:** Ansible Project\
**Created:** [June 14, 2022, 3:03pm UTC](https://forum.ansible.com/t/data-conversion-question/36737 "2022-06-14T15:03:22Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gregory\_Edigarov](https://avatars.discourse-cdn.com/v4/letter/g/71c47a/32.png) [@Gregory\_Edigarov](https://forum.ansible.com/u/Gregory_Edigarov)\
**Post date:** [June 14, 2022, 3:03pm UTC](https://forum.ansible.com/t/data-conversion-question/36737/1 "2022-06-14T15:03:22Z")

</div>

Hello,  
I’ve got a list variable that looks like this  
list:

- name: n1  
group: g1
- name: n2  
group: g1
- name: c1  
group: g2  
etc…

in my config file, this should become:  
g1: n1,n2  
g2: c1

etc…

how can this be done?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [June 14, 2022, 3:53pm UTC](https://forum.ansible.com/t/data-conversion-question/36737/2 "2022-06-14T15:53:47Z")

</div>

\* Given the list

&nbsp;&nbsp;\_list:  
&nbsp;&nbsp;&nbsp;&nbsp;- {group: g1, name: n1}  
&nbsp;&nbsp;&nbsp;&nbsp;- {group: g1, name: n2}  
&nbsp;&nbsp;&nbsp;&nbsp;- {group: g2, name: c1}

\* Use \*groupby\*

&nbsp;&nbsp;\_arr: "{{ \_list|groupby('group') }}"

&nbsp;&nbsp;gives

&nbsp;&nbsp;\_arr:  
&nbsp;&nbsp;&nbsp;&nbsp;- - g1  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- - {group: g1, name: n1}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- {group: g1, name: n2}  
&nbsp;&nbsp;&nbsp;&nbsp;- - g2  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- - {group: g2, name: c1}

\* Create lists of keys and values

&nbsp;&nbsp;\_keys: "{{ \_arr|map('first')|list }}"  
&nbsp;&nbsp;\_vals: "{{ \_arr|map('last')|map('map', attribute='name')|list }}"

&nbsp;&nbsp;gives

&nbsp;&nbsp;\_keys:  
&nbsp;&nbsp;&nbsp;&nbsp;[g1, g2]  
&nbsp;&nbsp;\_vals:  
&nbsp;&nbsp;&nbsp;&nbsp;- [n1, n2]  
&nbsp;&nbsp;&nbsp;&nbsp;- [c1]

\* Create the dictionary

&nbsp;&nbsp;\_dict: "{{ dict(\_keys|zip(\_vals)) }}"

&nbsp;&nbsp;gives

&nbsp;&nbsp;\_dict:  
&nbsp;&nbsp;&nbsp;&nbsp;g1: [n1, n2]  
&nbsp;&nbsp;&nbsp;&nbsp;g2: [c1]

---

<div class="post-metadata">

**Author:** ![Gregory\_Edigarov](https://avatars.discourse-cdn.com/v4/letter/g/71c47a/32.png) [@Gregory\_Edigarov](https://forum.ansible.com/u/Gregory_Edigarov)\
**Post date:** [June 14, 2022, 7:17pm UTC](https://forum.ansible.com/t/data-conversion-question/36737/3 "2022-06-14T19:17:53Z")

</div>

Thank you, Vladimir.  
It works. Is there any trick to make this with one-liner?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [June 14, 2022, 8:25pm UTC](https://forum.ansible.com/t/data-conversion-question/36737/4 "2022-06-14T20:25:11Z")

</div>

Sure. The one-liner below does the job as well. You're welcome

&nbsp;&nbsp;\_dict: "{{ dict(\_list|groupby('group')|map('first')|list|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip(\_list|groupby('group')|map('last')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map('map',  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute='name')|list))  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}}"

---

<div class="post-metadata">

**Author:** ![hugonz](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hugonz/32/503_2.png) [@hugonz](https://forum.ansible.com/u/hugonz)\
**Post date:** [June 15, 2022, 6:13am UTC](https://forum.ansible.com/t/data-conversion-question/36737/5 "2022-06-15T06:13:17Z")

</div>

> Hello,  
> I’ve got a list variable that looks like this  
> list:
> 
> - name: n1  
> group: g1
> - name: n2  
> group: g1
> - name: c1  
> group: g2  
> etc…
> 
> in my config file, this should become:  
> g1: n1,n2  
> g2: c1

I’m assuming a _config file_ here, so can you render it? The example format he docs on the groupby module comes in handy. [https://jinja.palletsprojects.com/en/3.1.x/templates/#jinja-filters.groupby](https://jinja.palletsprojects.com/en/3.1.x/templates/#jinja-filters.groupby)

{% for group, values in (list | groupby(‘group’) %}

{{ group }}:{% for item in value %}{{ item }},{% endfor %}

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [June 15, 2022, 8:02am UTC](https://forum.ansible.com/t/data-conversion-question/36737/6 "2022-06-15T08:02:11Z")

</div>

The template can be fixed

&nbsp;&nbsp;{% for group, values in \_list|groupby('group') %}  
&nbsp;&nbsp;{{ group }}: {{ values|map(attribute='name')|join(',') }}  
&nbsp;&nbsp;{% endfor %}

to get the expected result

&nbsp;&nbsp;g1: n1,n2  
&nbsp;&nbsp;g2: c1
