[英]Is it possible to sort a list of objects in Jinja2 based on subattributes?
就我而言,我有一个字典列表,其中包含其他几个字典列表。
l = [{
'a': [
{ 'b': 4}
]
}, {
'a': [
{ 'b': 3}
]
}]
从技术上我想做的是使用jinja2的排序过滤器使用路径['a'] [0] ['b']进行排序。
有可能吗?
您可以编写自定义模板过滤器。
http://jinja.pocoo.org/docs/dev/api/#custom-filters
这是一个粗略的解决方案(不支持反向,区分大小写等):
在您的应用中的某处:
def deep_sort(value, attribute, subattribute):
return sorted(value, key=lambda element: element[attribute][0][subattribute])
environment.filters['deep_sort'] = deep_sort
在您的模板中:
{% for value in l|deep_sort('a', 'b') %}
{{value['a'][0]['b']}}
{% endfor %}
如果需要,可以在一行中尝试:
l = [{
'a': [
{ 'b': 4}
]
}, {
'a': [
{ 'b': 9}
]
},
{
'a': [
{ 'b': 3}
]
}]
print(sorted(l,key=lambda x:x['a'][0]['b']))
输出:
[{'a': [{'b': 3}]}, {'a': [{'b': 4}]}, {'a': [{'b': 9}]}]
说明:
使用lambda可以访问b的值,因此基本上sorted()将基于int列表进行排序,如下所示:
print(list(map(lambda x:x['a'][0]['b'],l)))
输出:
[4, 9, 3]
sorted()将基于此列表进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.