gpt4 book ai didi

python - Ansible 使用解析字符串和循环更新 Dict Var

转载 作者:行者123 更新时间:2023-12-01 06:31:19 25 4
gpt4 key购买 nike

我正在尝试使用 Ansible 在解析特定格式的字符串后使用嵌套字典更新字典变量。我可以在 python 中轻松完成此操作,但在将逻辑转换为 Ansible 时遇到困难。通过查看一些文档,我发现我可以在循环中使用组合来更新字典,但没有得到所需的结果。我在下面的逻辑中缺少什么吗?

字符串:“husky-1-dog,burmese-2-cat”

所需的 Ansible 字典:{'cat': {'age': '2', 'breed': 'burmese'}, 'dog': {'age': '1', 'breed': '哈士奇'}}

Python 中:

mydict = {}
mystr = "husky-1-dog,burmese-2-cat"

mydict.update({i.split('-')[2]:
{'breed': i.split('-')[0],
'age': i.split('-')[1]}
for i in mystr.split(',')})

输出:

{'cat': {'age': '2', 'breed': 'burmese'}, 'dog': {'age': '1', 'breed': 'husky'}}

Ansible:

---
- hosts: localhost
gather_facts: false
vars:
mydict: {}
mystr: "husky-1-dog,burmese-2-cat"

tasks:

- name: Create Nested Dict
set_fact:
contents_dict: "{{ mydict | combine({item.split('-')[2]: {'breed': item.split('-')[0], 'age': item.split('-')[1]}}, recursive=true) }}"
loop: "{{ mystr.split(',') }}"

- debug: msg={{mystr.split(',')}}
- debug: var=mydict

输出:

PLAY [localhost] ***********************

TASK [Create Nested Dict] **************
ok: [127.0.0.1] => (item=husky-1-dog)
ok: [127.0.0.1] => (item=burmese-2-cat)

TASK [debug] **************************
ok: [127.0.0.1] => {
"mydict": {}
}

最佳答案

你们真的很亲密。您只是设置了错误的命名变量。此外,您可以使用默认过滤器绕过将 var 初始化为空字典:

---
- hosts: localhost
gather_facts: false
vars:
mystr: "husky-1-dog,burmese-2-cat"

tasks:

- name: Create Nested Dict
set_fact:
mydict: "{{ mydict | default({}) | combine({item.split('-')[2]: {'breed': item.split('-')[0], 'age': item.split('-')[1]}}, recursive=true) }}"
loop: "{{ mystr.split(',') }}"

- debug: msg={{mystr.split(',')}}
- debug: var=mydict

给出:

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Create Nested Dict] *****************************************************************************************************************************************************************************************
ok: [localhost] => (item=husky-1-dog)
ok: [localhost] => (item=burmese-2-cat)

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"husky-1-dog",
"burmese-2-cat"
]
}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"mydict": {
"cat": {
"age": "2",
"breed": "burmese"
},
"dog": {
"age": "1",
"breed": "husky"
}
}
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

关于python - Ansible 使用解析字符串和循环更新 Dict Var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59903266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com