首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换dict列表中的值

替换dict列表中的值
EN

Stack Overflow用户
提问于 2021-01-29 11:55:30
回答 2查看 582关注 0票数 1

我正在尝试将键"extension_last_heartbeat_time“(date)的值替换为这个dicts列表中的静态字符串"”

代码语言:javascript
复制
[
        {
            "vcenter": "vcenter-A",
            "vcenter_extension_info": [
                {
                    "extension_company": "VMware Inc.",
                    "extension_key": "com.vmware.vim.sms",
                    "extension_label": "VMware vCenter Storage Monitoring Service",
                    "extension_last_heartbeat_time": "2020-11-03T09:05:41.676497+00:00",
                    "extension_type": "",
                    "extension_version": "5.5"
                },
                {
                    "extension_company": "VMware Inc.",
                    "extension_key": "com.vmware.vim.vsm",
                    "extension_last_heartbeat_time": "2020-11-03T09:05:41.678007+00:00",
                    "extension_type": "",
                    "extension_version": "6.5"
                },
                {
                    "extension_company": null,
                    "extension_key": "VirtualCenter",
                    "extension_last_heartbeat_time": "2020-11-03T09:05:41.684018+00:00",
                    "extension_type": "",
                    "extension_version": "1.0"
                }
            ]
        },
        {
            "vcenter": "vcenter-B",
            "vcenter_extension_info": [
                {
                    "extension_company": "VMware Inc.",
                    "extension_key": "com.vmware.vim.sms",
                    "extension_last_heartbeat_time": "2020-08-17T13:12:10.529370+00:00",
                    "extension_type": "",
                    "extension_version": "5.5"
                },
                {
                    "extension_company": "VMware Inc.",
                    "extension_key": "com.vmware.vim.vsm",
                    "extension_last_heartbeat_time": "2020-08-17T13:12:10.530946+00:00",
                    "extension_type": "",
                    "extension_version": "6.5"
                },
                {
                    "extension_company": null,
                    "extension_key": "VirtualCenter",
                    "extension_last_heartbeat_time": "2020-08-17T13:12:10.537281+00:00",
                    "extension_version": "1.0"
                }
            ]
        }
]

我试过:

'0-9{4}-0-9{2}-0-9{2}T0-9{2}:0-9{2}:0-9{2}.*',

  • 名称:匿名上一次心跳时间set_fact: dict:“{ dict
  • map(‘regex_
  • ’, '')列表}”

但是它删除了大部分数据

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-29 16:52:22

Jinja2数据结构是“活动的”,因此它们在所有jinja2评估上下文中都会发生变异。诀窍是(至少在这篇文章中) set语句创建了新的局部变量,并且没有按照用户预期的方式分配,从而导致了一些愚蠢。这就是为什么我们必须使用dict.update作为一个“覆盖这个切分成员”的工作。

代码语言:javascript
复制
- set_fact:
    # you didn't say what variable contained that outermost `list[dict]`
    # so change that as needed
    vcenter_data: |
        {%- for i in vcenter_data -%}
        {%-   for e in i.vcenter_extension_info -%}
        {%-     set _ = e.update({
            "extension_last_heartbeat_time": new_extension_last_heartbeat_time}) -%}
        {%-   endfor -%}
        {%- endfor -%}
        {{ vcenter_data }}
  vars:
    new_extension_last_heartbeat_time: '1111-22-33'
票数 3
EN

Stack Overflow用户

发布于 2021-02-01 12:29:41

解决这一问题的方法之一是使用regex_replace。如果数据位于变量"vcenter_data“中,那么解决方案可能如下所示:

代码语言:javascript
复制
    - name: anonymize instance uuid
      set_fact:
        vcenter_data: "{{ vcenter_data| regex_replace('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}', '<INSTANCE_UUID>') }}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65953988

复制
相关文章

相似问题

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