我有一个类似的dict
{"product_1": [
"account1",
"account2"
],
"product_2": [
"account1",
"account2"
],
...
"product_10": [
"account1",
"account2"
]}
如何根据密钥筛选此dict?
有特定的jinja2过滤器:selectattr
和rejectattr
。
但这些工作是在一个dict列表上,而不是在dict本身上。您必须使用dict2items
和items2dict
来解决此问题。
以下是一些用法示例:
# Values are dicts, select only items with specific attribute defined.
result: "{{ my_dict | dict2items | selectattr('value.my_attribute', 'defined')
| list | items2dict }}"
# Values are lists (as in your example), check for an existing item value.
result: "{{ my_dict | dict2items | selectattr('value', 'contains', 'some item')
| list | items2dict }}"
# Values are dict. Reject elements when attributes has a specific value.
result: "{{ my_dict | dict2items | rejectattr('value.my_attribute', '==', 'Does not apply')
| list | items2dict }}"
查看上述文件和其他过滤器,了解所有可能性的详尽视图。
您可以使用dict2items
重新格式化元素,使其具有要搜索的名称作为关键字,然后将其传递给map
过滤器以获得这些关键字:
---
- hosts: localhost
gather_facts: false
vars:
myvar:
product_1:
- account1
- account2
product_2:
- account1
- account2
product_10:
- account1
- account2
tasks:
- name: extract the list of keys
debug:
msg: '{{ myvar | dict2items | map(attribute="key") | list }}'
欢呼