根据关键字筛选字典



我有一个类似的dict

{"product_1": [
"account1",
"account2"
],
"product_2": [
"account1",
"account2"
],
...
"product_10": [
"account1",
"account2"
]}

如何根据密钥筛选此dict?

有特定的jinja2过滤器:selectattrrejectattr

但这些工作是在一个dict列表上,而不是在dict本身上。您必须使用dict2itemsitems2dict来解决此问题。

以下是一些用法示例:

# 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 }}'

欢呼

最新更新