簡體   English   中英

Ansible 從列表中創建一個字典,其中賠率是鍵,偶數是值

[英]Ansible create a dictionary from list where odds are keys evens are values

我在下面有 YAML 格式的數據

ospf_neighbors:
  - data: xe-0/0/1.0
  - data: Full
  - data: xe-0/0/10.0
  - data: Full
  - data: xe-0/0/11.0
  - data: Full

我想做的是創建一個字典,基本上賠率是鍵,偶數是值。 這是目標:

ospf_neighbors_dict:
  xe-0/0/1.0: Full
  xe-0/0/10.0: Full
  xe-0/0/11.0: Full
- name: Create Dict Pair for OSPF neighbors
  set_fact:
     ospfneighbors_dict: "{{ ospfneighbors_dict|
                             default({})|
                             combine({item['data'][::2]: item['data'][1::2]}) }}"
  with_items: "{{ ospf_neighbors }}"

但那只是拼接數據,eg "Fl": "ul"

例如

    - set_fact:
        ospf_neighbors_dict: "{{ dict(_keys|zip(_vals)) }}"
      vars:
        _data: "{{ ospf_neighbors|map(attribute='data')|list }}"
        _keys: "{{ _data[::2] }}"
        _vals: "{{ _data[1::2] }}"

創建目標

ospf_neighbors_dict:
  xe-0/0/1.0: Full
  xe-0/0/10.0: Full
  xe-0/0/11.0: Full

解決方法很多,一個:

    - set_fact:
        ospf_neighbors_dict: "{{ ospf_neighbors_dict|d({})|
                                 combine({ospf_neighbors[item].data:
                                          ospf_neighbors[item + 1].data}) }}"
      loop: "{{ range(0, ospf_neighbors|length, 2) }}"

結果:

ospf_neighbors_dict:
  xe-0/0/1.0: Full
  xe-0/0/10.0: Full
  xe-0/0/11.0: Full

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM