Dictionary 用于在地图[1,2]中将字典构造为[{';x';:1},{';x';:2}]

Dictionary 用于在地图[1,2]中将字典构造为[{';x';:1},{';x';:2}],dictionary,ansible,jinja2,Dictionary,Ansible,Jinja2,大多数Jinja过滤器都是关于减少数据量的。 如果我想把它弄大一点呢 输入 名单。这些值可以是简单的,也可以是复杂的 - 1 - 'a' - ['b', 'c'] - {'d': 'e'} 期望输出 我想列出一份清单 与输入列表的长度相同 新列表中的每一项都是一本词典 有一对(键、值) 密钥是硬编码的,输出列表中的每个项目都是相同的 该值是输入列表中的对应项 我要找的是 {{ input | map(some_filter, key='x') | list }} 我可以用什么作为一些过滤

大多数Jinja过滤器都是关于减少数据量的。 如果我想把它弄大一点呢

输入 名单。这些值可以是简单的,也可以是复杂的

- 1
- 'a'
- ['b', 'c']
- {'d': 'e'}
期望输出 我想列出一份清单

  • 与输入列表的长度相同
  • 新列表中的每一项都是一本词典 有一对(键、值)
  • 密钥是硬编码的,输出列表中的每个项目都是相同的
  • 该值是输入列表中的对应项
我要找的是

{{ input | map(some_filter, key='x') | list }}
我可以用什么作为一些过滤器

笔记 我用Ansible来做这个。 因此,使用JMESPath和
json_查询
过滤器的解决方案是有效的。
类似地,Ansible的解决方案使用了
dict2items
items2dict
某种程度上也是有效的。

下面的任务完成了这项工作

-调试:
msg:{input | json_查询('[*].{x:@}')}
给予


在这里是无用的,因为输入是一个列表。在这里也是无用的,因为结果也应该是一个列表。此外,它也是无用的,因为它不是过滤器,不能在
map
中使用。如果没有
json\u查询
必须使用
循环
。比如说

-设置事实:
输出:“{output+[{'x':项}]}”
循环:“{input}}”
变量:
输出:[]

可以编写一个过滤器。比如说

shell>cat过滤器插件/item2dict.py
def项目2DICT(t):
h={t[0]:t[1]}
返回h
类FilterModule(对象):
''Ansible过滤器。第2项信息技术“
def过滤器(自):
返回{
“item2dict”:item2dict
}
然后下面的任务给出相同的结果

-调试:
msg:{'x'|产品(输入)|映射('item2dict')|列表}”
{{ input | map(some_filter, key='x') | list }}
  msg:
  - x: 1
  - x: a
  - x:
    - b
    - c
  - x:
      d: e