在我的情况下,我有一个包含其他几个dicts列表的dicts列表。
l = [{
'a': [
{ 'b': 4}
]
}, {
'a': [
{ 'b': 3}
]
}]
我在技术上喜欢做的是使用jinja2的排序过滤器对路径['a'] [0] ['b']进行排序。
有可能吗?
答案 0 :(得分:2)
您可以编写自定义模板过滤器。
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 %}
答案 1 :(得分:0)
如果您愿意,可以在一行中尝试:
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()将对此列表进行排序。