[英]Jinja2 map list to dictionary
是否可以使用 Jinja2 使用列表/映射理解将原语列表转换为字典列表?
鉴于这种结构:
list:
- some_val
- some_val_2
在每个元素上应用map
以获得:
list:
- statically_added: some_val
- statically_added: some_val_2
也可以采用其他方式: list_from_example|map(attribute="statically_added")|list
我提出了同样的问题并找到了这个解决方案:
- debug:
msg: "{{ mylist | json_query('[].{\"statically_added\": @}') }}"
vars:
mylist:
- some_val
- some_val_2
输出:
ok: [localhost] => {
"msg": [
{
"statically_added": "some_val"
},
{
"statically_added": "some_val_2"
}
]
}
我最终编写了自己的微型过滤器。 我正在使用 Ansible,但我希望它也可以适用于其他环境。
对于 Ansible,将其放入文件filter_plugins/singleton_dict.py
:
class FilterModule(object):
def filters(self):
return {
'singleton_dict':
lambda element, key='singleton': {
key: element
}
}
然后[1, 2]|singleton_dict(key='name')
产生[{'name': 1}, {'name': 2}]
。 如果未指定key=
,则默认为'singleton'
。
其实很简单。 至少,这在 Ansible 中有效:
vars:
my_list:
- some_val
- some_val_2
dict_keys:
- key_1
- key_2
tasks:
- debug:
msg: "{{ dict(dict_keys | zip(my_list)) }}"
输出:
TASK [debug] *******************************
ok: [localhost] => {
"msg": {
"key_1": "some_val",
"key_2": "some_val_2"
}
}
请注意,您必须提供一个键列表,并且它们需要是不同的(字典的性质意味着键不能相同)。
更新。 刚意识到标题有点误导,我回答的是标题,而不是实际问题。 但是,我将保持原样,因为我相信很多人会在谷歌上将列表转换为字典并找到这篇文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.