我有以下字典:
public class MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton(){}
public static MySingleton getInstance() {
return instance;
} }
使用jinja2我想过滤掉(或拒绝)d = {'name': 'Johnny', 'age': 23, '_id': 167, 'sport': 'golf'}
键,所以我得到了以下字典(注意这个_id
字段是动态的,所以我想拒绝密钥,无论它是什么&# 39; s等于):
_id
我已尝试使用内置过滤器{'name': 'Johnny', 'age': 23, 'sport': 'golf'}
和reject
,但它没有按预期工作。这是我到目前为止所尝试的:
rejectattr
答案 0 :(得分:1)
这是两种方法。第一种采用dasmy's元组拒绝列表方法,以使用dict global function而不是list filter。第二种方法呈现ast.native_eval会被NativeTemplate.render()称为字典的字符。 (第二种方法不仅已经很冗长,而且可能需要扩展以处理所有可能的类型。)
from jinja2.nativetypes import NativeTemplate
def render_d(template):
print(
NativeTemplate(template).render(
d={"name": "Johnny", "age": 23, "_id": 167, "sport": "golf"}
)
)
render_d("{{dict(d.items() | rejectattr(0, 'equalto', '_id'))}}")
render_d(
"""
{
{% for key, value in d.items() -%}
{% if key != "_id" -%}
{% if value is string -%}
"{{key}}": "{{value}}",
{% else -%}
"{{key}}": {{value}},
{% endif -%}
{% endif -%}
{% endfor -%}
}
""".strip()
)
答案 1 :(得分:0)
也许稍晚一些,但是有些类似
{{ d.items() | rejectattr('0', 'equalto', '_id') | list }}
可能的帮助:它将dict转换为元组列表,并根据每个元组中第一个条目的值拒绝条目。根据您的用例,最终的|list
可能不是必需的。它将再次将rejectattr
创建的生成器对象转换为列表。