You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向set_fact定义的字典中的数组添加元素?

解决Ansible字典内数组元素添加问题

问题根源

  1. 你最初的update errors任务错误地将results变量直接替换成了errors数组,完全丢失了原字典的结构(包含corrections和errors两个键的字典)。
  2. 使用combine过滤器时,你错误地用results.errors(一个列表)作为新字典的键,而字典的键必须是可哈希类型(如字符串),这才导致了unhashable type: 'list'错误。

正确实现方式

要保持原字典结构并向指定数组添加元素,需通过combine过滤器明确指定要更新的字符串键,并将对应的值设为原数组拼接新元素后的结果:

初始化字典(保留你的正确初始写法)

- set_fact:
    results: "{{ results | default({ 'corrections': [], 'errors': [] }) }}"

向errors数组添加元素

- name: 更新errors数组
  set_fact:
    results: "{{ results | combine({'errors': results.errors + ['some error found']}) }}"

向corrections数组添加元素(同理)

- name: 更新corrections数组
  set_fact:
    results: "{{ results | combine({'corrections': results.corrections + ['some correction done']}) }}"

补充说明

  • 如果需要一次性添加多个元素,直接在列表中追加多个值即可,比如:results.errors + ['error1', 'error2', 'error3']
  • combine过滤器会保留原字典中未指定的键(比如更新errors时,corrections会自动保留),完美保持原数据结构。

内容的提问来源于stack exchange,提问作者Mint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:45:35