【问题标题】:Searching for key in a list of dicts in Ansible [duplicate]在 Ansible 的字典列表中搜索键 [重复]
【发布时间】:2018-01-25 00:13:21
【问题描述】:

我有一个类似于以下内容的字典列表:

"subnets": [
        {
            "name": "subnet1-name34554",
            "address": "192.168.1.100"
            "id: "id1"
        },
        {
            "name": "subnet2-name67678",
            "addr": "192.168.1.200"
            "id":   "id2"
        },
        {
            "name": "subnet3-name23345",
            "addr": "192.168.1.300"
            "id":   "id3"
        }
    ]

我正在尝试使用部分名称搜索字典并返回全名。例如使用subnet1 搜索应该返回subnet1-name34554

如果我这样做:

- name: test
  debug: msg="{{ subnets |  selectattr("name", "search", "subnet1") | list  }}"

我得到一个带有单个字典的列表:

 [
   {
     "name": "subnet1-name34554",
     "address": "192.168.1.100"
     "id: "id1"
    }
 ]

我不确定仅提取“名称”键的下一步是什么,或者是否有更好的方法?

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    作为结果,您会得到 dicts 列表(单个 dict)。

    因此将其输入first 过滤器以仅获取第一个元素,然后寻址name 属性。

    - name: test
      debug:
        msg: "{{ (subnets |  selectattr('name', 'search', 'subnet1') | list | first).name }}"
    

    【讨论】:

    • 它真的需要自己的答案吗?在不到 15 秒的时间内找到了自己的副本...
    • 我需要一些帮助来继续解决方案,假设我想要存在值id3 的字典索引。那么它的语法是什么?
    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2021-09-03
    • 2015-10-15
    • 2017-05-25
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多