Matt's solution is fine (and elegant!) for simple cases like this particular one. However, I found myself needing to filter items on some more complex conditions a few times and started using the Jinja do extension to effectively turn variable assignments into arbitrary computations:
my_list: | {%- set names = [] -%} {%- for item in my_dict if item.item_en -%} {%- do names.append(item.name) -%} {%- endfor -%} {{ names }} It's important to do proper whitespace-control (the dashes in {%- ... -%}) because in the end the string assigned to my_list must be "['name1', 'name3']" and not something like " ['name1', 'name3']". In the former case, Ansible converts it to a proper list (because the value starts with '['), in the latter my_list would be assigned the actual string " [...]". And you need to enable the Jinja extension in your ansible.cfg: [defaults] jinja2_extensions = jinja2.ext.do As mentioned in the beginning, this isn't really necessary in this case and certainly isn't very much in Ansible's spirit of simplicity, but it has saved me from duplicating information across multiple variables several times. On Wednesday, May 20, 2015 at 3:20:17 PM UTC+2, Matt Martz wrote: > > I think you want something like: > > my_list: "{{ my_dict|selectattr('item_en')|map(attribute='name')|list }}" > > On Tuesday, May 19, 2015, Javeria Khan <javer...@gmail.com <javascript:>> > wrote: > >> Hi, >> >> I've tried searching everything but can't find a possible solution. I >> have a yml that defines all my variables for a playbook and I need to do >> something like the following inside of it: >> ---------------- >> my_dict: >> - { item_en: True, name: name1, type: type1, key: value1 } >> - { item_en: False, name: name2, type: type2, key: value2 } >> - { item_en: True, name: name3, type: type3, key: value3 } >> >> my_list: >> {% for item in my_dict %} >> {% if my_dict[item].item_en == True %} >> {{ my_dict[item].name }} >> {% endfor %} >> --------------- >> >> So basically I need 'my_list' to be a list of 'names' from every dict >> object that has item_en = True. Based on the data structure above, it would >> look like this: >> >> my_list: >> - name1 >> - name3 >> >> I know this is possible using the jinja loop syntax in a template but >> this isn't a template file. >> >> Thanks >> >> -- >> 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 ansible-project+unsubscr...@googlegroups.com. >> To post to this group, send email to ansible-project@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/5e6a8d23-4835-44c2-9902-5ec3a49feebb%40googlegroups.com >> >> <https://groups.google.com/d/msgid/ansible-project/5e6a8d23-4835-44c2-9902-5ec3a49feebb%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > > -- > Matt Martz > @sivel > sivel.net > > -- 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 ansible-project+unsubscr...@googlegroups.com. To post to this group, send email to ansible-project@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/71f13d7f-50ee-48ab-bfa4-1f622e92179c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.