dictionary - 如何使用 Jinja 过滤器将字典应用于项目列表?
问题描述
我有一个项目列表,它们都显示为某个字典中的键。我想使用 Jinja2 过滤器在字典中查找每个列表项并在列表中返回相应的值。
在 python 中,这将是:
[my_dict[x] for x in my_list]
Jinja 等价物是什么?
my_list | map(my_dict)
不起作用。
这是一个示例剧本。
---
- hosts: localhost
connection: local
vars:
my_dict:
a: 1
b: 2
c: 3
my_list:
- a
- c
tasks:
- assert:
that:
- "{{ actual == expected }}"
vars:
# [my_dict[x] for x in my_list]
actual: "{{ my_list | map(my_dict) | list }}"
expected:
- 1
- 3
如果你运行它,你会得到:
致命的:[本地主机]:失败!=> {"msg": "在模板 '{{ my_list | map(my_dict) | list }}' 时发生未处理的异常。错误是 <class 'ValueError'>,原始消息:键必须是字符串"}
我想修改该actual:
行,以使该剧本可以正常运行。
请注意,我不想在 Ansible 本身中循环。这是一个简单的 MWE。在我的真实示例中,此查找应该内联在一个更大的模板文件中。
解决方案
推荐阅读
- php - 如何在命令外壳中创建一个虚拟控制器传递给组件 CakePHP 2.4.3
- jquery - 视差滚动仅适用于顶部元素
- c# - 有没有办法可以简化这个正则表达式?
- django - 通过简单字段和/或多字段过滤对详细视图的访问
- c - 我的代码有什么问题。我没有得到所需的输出。当在其中一个在线编译器中执行此代码时,它没有提供所需的输出
- python - [Python][Adobe Acrobat]将PDF另存为Excel问题
- huawei-mobile-services - HUAWEI Push-获取访问令牌的API不起作用
- javascript - 使用 javascript 刷新 django 子模板 - 仅重新加载页面的一部分
- php - Ajax 尝试从表中更新数据,但在其他行中不起作用
- fortran - Fortran 中的 COMMON 块是否必须在 OpenMP 的每个子例程中声明为 threadprivate?