首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不可用变量代替字典键,而是用于字典值

不可用变量代替字典键,而是用于字典值
EN

Stack Overflow用户
提问于 2021-06-29 11:51:15
回答 1查看 143关注 0票数 0

我试图用我创建的字典来做键和值的更新,但是每个字典都有变量。我提示用户要更新哪个键,以及要更新哪些值,并使用set_fact存储它们。

这是我的应用字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
applications:
  office:
    nuspec:
      id: black
      version: blue
    chocolatey_install:
      softwareName: yellow

当我硬编码'id‘并尝试用变量更新它的值时,一切都很好。见下文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- name: Setting new_chocolatey_parameter_value
  set_fact: new_chocolatey_parameter_value="rainbow"

- name: Change applications.office.nuspec.id to prompted value
  set_fact:
    applications: "{{ applications|combine({'office': {'nuspec': {'id': '{{ new_chocolatey_parameter_value }}'}}}, recursive=True) }}"

我得到了输出Id希望

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ok: [localhost]

TASK [output applications] *****************************************************
ok: [localhost] => {
    "applications": {
        "office": {
            "chocolatey_install": {
                "softwareName": "yellow", 
            }, 
            "nuspec": {
                "id": "rainbow", 
                "version": "blue"
            }
        }
    }
}

但我也希望使用一个变量来更新'id‘所在的位置,以便更新应用程序字典。见下文

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- name: Setting new_chocolatey_parameter_value
  set_fact: new_chocolatey_parameter_value="rainbow"

- name: Setting selected_current_chocolatey_parameter
  set_fact: selected_current_chocolatey_parameter="id"        

- name: Change applications.office.nuspec.id to prompted value
  set_fact:
    applications: "{{ applications|combine({'office': {'nuspec': {'{{ selected_current_chocolatey_parameter }}': '{{ new_chocolatey_parameter_value }}'}}}, recursive=True) }}"

但是正如你在下面所看到的,它实际上是在字典中放置了一个新条目,其中的键是

"{{ selected_current_chocolatey_parameter }“

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ok: [localhost] => {
    "applications": {
        "office": {
            "chocolatey_install": {
                "softwareName": "yellow", 
            }, 
            "nuspec": {
                "id": "black", 
                "version": "blue", 
                "{{ selected_current_chocolatey_parameter }}": "rainbow"
            }
        }
    }
}

如何简单地在我的应用程序字典更新代码中替换{{ selected_current_chocolatey_parameter }的值(它只是'id‘)?当'id‘被硬编码时,我试图获得与输出相同的结果,但是使用变量的值来实现这一点。

我尝试过许多单引号/双引号的排列,并尝试过转义字符,但都没有效果。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2021-06-29 11:59:48

你试过这个吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"{{ applications|combine({'office': {'nuspec': {'%s': '%s'}}}, recursive=True) }}" % (selected_current_chocolatey_parameter, new_chocolatey_parameter_value)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68184848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文