Thanks a lot for your detailed instructions. 
I understand dictionnaires much better now but I still have to practice.
I know we learn by doing but how do we know what tips or functions we need 
for a specific case. It is not easy to use something that we don't know 
about, by example I didn't know about zip. 
So I need to learn the other functions and how to involve them together.

Best regards, H


On Wednesday, March 9, 2022 at 12:28:04 AM UTC+1 [email protected] wrote:

> On Tue, 8 Mar 2022 11:22:04 -0800 (PST)
> Hiero-nymo <[email protected]> wrote:
>
> > 1) type_debug read from user_list and it is a dict then why it give a 
> list 
> > as result?
>
> The value of the variable *user_list* is a list (you wouldn't be able
> to iterate it if otherwise)
>
> user_list:
> - city: New York
> name: name1
> phone: 03-45-67
> - city: London
> name: name2
> phone: 04-45-67
> - city: Berlin
> name: name3
> phone: 05-45-67
>
> > 2) I has understood, user_list ist the key of dict and the rest is the 
> > value. In that case why item['name'] is like a key?
>
> Yes. *user_list* is dictionary (aka hash, or mapping) with one key
> *user_list*. The value of this key is the list. Each item of this
> list is a dictionary therefore, in iteration, you can use *name* as a
> key in the dictionary *item*.
>
> > 3) Is my playbook good or is a better solution?
>
> The dictionaries can be searched faster compared to the lists
>
> - set_fact:
> user_dict: "{{ dict(_keys|zip(user_list)) }}"
> vars:
> _keys: "{{ user_list|map(attribute='name')|list }}"
>
> transforms the list to a dictionary
>
> phone_book:
> name1:
> city: New York
> name: name1
> phone: 03-45-67
> name2:
> city: London
> name: name2
> phone: 04-45-67
> name3:
> city: Berlin
> name: name3
> phone: 05-45-67
>
> Now you can easily search by names. If the names alone are not unique
> create the keys as a combination of attributes
>
> - set_fact:
> phone_book: "{{ dict(_keys|zip(_vals)) }}"
> vars:
> _names: "{{ user_list|map(attribute='name')|list }}"
> _addrs: "{{ user_list|map(attribute='city')|list }}"
> _keys: "{{ _names|zip(_addrs)|map('join', ',')|list }}"
> _vals: "{{ user_list|map(attribute='phone')|list }}"
>
> create keys by joining the name and the city, and values by selecting
> the phone only
>
> phone_book:
> name1,New York: 03-45-67
> name2,London: 04-45-67
> name3,Berlin: 05-45-67
>
> You need the bracket notation to reference such keys
>
> phone_book['name2,London']: 04-45-67
>
> You'll have to stick with the lists if you are not able to create
> unique keys.
>
> -- 
> Vladimir Botka
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/9916c628-8822-49a0-802c-80be433e2868n%40googlegroups.com.

Reply via email to