我有一个字典列表,其中每个字典都有一个布尔条目.我想显示这些项目True以及这些项目的数量.我正在使用selectattr过滤器,但它返回一个生成器,并且调用|length它会引发错误.如何获得selectattrJinja 退回物品的长度?
my_list = [{foo=False, ...}, {foo=True, ...}, ...]
Run Code Online (Sandbox Code Playgroud)
{{ my_list|selectattr('foo', 'equalto', True)|length }}
Run Code Online (Sandbox Code Playgroud) 我试图用一个现有的dict,例如,五个可能的条目,并将其条目移动到一个新的字典,"翻译"沿途的键.第一个字典的键的结构使得移动不能在程序上完成.无法保证所有条目都将出现在第一个词典中.
为了避免KeyError,可以在自己的try块中分配每个条目
first_dict = {
'key_1': foo1,
'key_two': foo2,
'key_three': foo3,
'key_number_4': foo4,
'key_5': foo5
}
second_dict = {}
try:
second_dict['translated_key_1'] = first_dict['key_1']
except KeyError:
pass
try:
second_dict['translated_key_2'] = first_dict['key_two']
except KeyError:
pass
...
try:
second_dict['translated_key_5'] = first_dict['key_5']
except KeyError:
pass
'translated_key_2': first_dict['key_two'],
'translated_key_3': first_dict['key_three'],
'translated_key_4': first_dict['key_number_4'],
'translated_key_5': first_dict['key_5'],
}
Run Code Online (Sandbox Code Playgroud)
也许更好的方法是检查第一个字典中是否存在该条目然后分配它.
if 'key_1' in first_dict:
second_dict['translated_key_1'] = first_dict['key_1']
if 'key_two' in first_dict:
second_dict['translated_key_2'] = first_dict['key_two']
...
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,有没有办法压缩这个?当元素的数量很大时,似乎这会变得不必要地笨重.有没有办法迭代关系而不try为每个创建一个块?