首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加入字典列表

加入字典列表
EN

Stack Overflow用户
提问于 2021-04-07 19:04:30
回答 1查看 35关注 0票数 1

我有一个宏地址和网络适配器的列表,我想将它们合并成一个列表。

代码语言:javascript
复制
  vars:
    network_adapters:
    - name: "Network adapter one"
    - name: "Network adapter two"

    macaddresses:
    - "00:50:56:9c:8c:b1"
    - "00:50:56:9c:8c:b2"

可以使用下面的方法使用额外的变量来完成,但是我希望oneliner

代码语言:javascript
复制
  - name: "Set fact"
    set_fact:
      network_interfaces: >-
        {{
          network_interfaces | default([])
            + [item[0] | combine({'macaddress':item[1]})]
        }}
    loop: "{{ network_adapters | zip(macaddresses) }}"

产出:

代码语言:javascript
复制
{
  "macaddress": "00:50:56:9c:8c:b1",
  "name": "Network adapter one"
},
{
  "macaddress": "00:50:56:9c:8c:b2",
  "name": "Network adapter two"
}

这是我的一些选拔赛,也许有人觉得它有用。

  • 将散列添加到宏地址列表中

"{{ macaddresses | json_query('[].{\"macaddress\": @}') }}"

{“宏地址”:"00:50:56:9c:8c:b1“} {”宏地址“:"00:50:56:9c:8c:b2”}

  • 组合成一个散列列表。

"{{ macaddresses | json_query('[].{\"macaddress\": @}') | zip(network_adapters) }}"

{“宏地址”:"00:50:56:9c:8c:b1“},{”名称“:”网络适配器一“},{”宏地址“:"00:50:56:9c:8c:b2”},{“名称”:“网络适配器2”} }

  • 合并成字典

"{{ macaddresses | json_query('[].{\"macaddress\": @}') | map('combine', network_adapters) }}"

{“宏地址”:“00:50:56:9C:9C:8C:B1”,“名称”:“网络适配器二”},{“宏地址”:"00:50:56:9c:8c:b2",“名称”:“网络适配器2”} }

我对最后一个特别感兴趣。这两次输出带有最后一个network_adapters项的字典。是虫子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 19:56:51

这项任务完成了这项工作

代码语言:javascript
复制
    - debug:
        msg: "{{ dict(network_adapters|map(attribute='name')|zip(macaddresses))|
                 dict2items(key_name='name', value_name='macaddress') }}"

给出

代码语言:javascript
复制
  msg:
  - macaddress: 00:50:56:9c:8c:b1
    name: Network adapter one
  - macaddress: 00:50:56:9c:8c:b2
    name: Network adapter two

问:“更复杂的数据。保留其他属性,如‘ip’?‘。”

代码语言:javascript
复制
    network_adapters:
    - name: "Network adapter one"
      ip: "192.168.0.1"
    - name: "Network adapter two"
      ip: "192.168.0.2"

答:没有“一条龙”,只有循环(你已经发现了)。

代码语言:javascript
复制
    - set_fact:
        na2: "{{ na2|default([]) + [item.0|combine({'macaddress': item.1})] }}"
      with_together:
        - "{{ network_adapters }}"
        - "{{ macaddresses }}"

给出

代码语言:javascript
复制
  na2:
  - ip: 192.168.0.1
    macaddress: 00:50:56:9c:8c:b1
    name: Network adapter one
  - ip: 192.168.0.2
    macaddress: 00:50:56:9c:8c:b2
    name: Network adapter two
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66992587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档