首页 > 解决方案 > 根据键过滤字典

问题描述

我有一个这样的字典

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

如何根据键过滤这个字典?

标签: ansible

解决方案


有特定的 jinja2 过滤器:selectattrrejectattr.

但是这些在字典列表上工作,而不是在字典本身上。您将不得不使用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 }}"

检查上述文档和其他过滤器,以全面了解所有可能性。


推荐阅读