我有这样的字典
{"product_1": [
"account1",
"account2"
],
"product_2": [
"account1",
"account2"
],
...
"product_10": [
"account1",
"account2"
]}
如何根据键过滤此字典?
答案 0 :(得分:1)
您可以使用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 }}'
欢呼
答案 1 :(得分:1)
有专门的jinja2过滤器:selectattr
和rejectattr
。
但是这些仅适用于词典列表,而不适用于词典本身。您将不得不使用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 }}"
查看上述文档和filters的其余部分,以详尽了解所有可能性。