我如何对字典进行排序?
my_dict = {
'abc': {'name': 'B', 'is_sth': True},
'xyz': {'name': 'A', 'is_sth': True}
}
在Jinja中,如何按name
排序?
我尝试过{% for id, data in my_dict|dictsort(by='value') if data.is_sth %}
但结果并不是我期望的。
我如何对字典进行排序?
my_dict = {
'abc': {'name': 'B', 'is_sth': True},
'xyz': {'name': 'A', 'is_sth': True}
}
在Jinja中,如何按name
排序?
我尝试过{% for id, data in my_dict|dictsort(by='value') if data.is_sth %}
但结果并不是我期望的。
Solution:
my_dict.items()|sort(attribute='1.name')
.items()
返回一个包含两个元素的元组,第一个元素是键(key),第二个元素是值(value)。数字 1
表示第二个元素,也就是值,而 .name
表示内部字典中与该值对应的键。 - mvidalgarciajinja2有一个完美的解决方案
do_dictsort(value, case_sensitive=False, by='key')
{% for item in mydict|dictsort %}
sort the dict by key, case insensitive
{% for item in mydict|dicsort(true) %}
sort the dict by key, case sensitive
{% for item in mydict|dictsort(false, 'value') %}
sort the dict by key, case insensitive, sorted
normally and ordered by value.
from jinja2 import Template
from collections import OrderedDict
tmplt = Template('''
{% for id, data in od.items() if data.is_sth %}
{{id}}, {{data}}
{% endfor %}
''')
od = OrderedDict((key, value) for key, value in
sorted(my_dict.items(), key=lambda x: x[1]['name']))
print(tmplt.render(od = od))
这给出:
xyz, {'name': 'A', 'is_sth': True}
abc, {'name': 'B', 'is_sth': True}
除此之外,您可能需要创建一个自定义过滤器。
{% for id, data in my_dict.items()|sort(attribute='1.name') if data.is_sth %}
- mvidalgarcia'1.name'
周围的引号...你可以把你找到的东西发在答案里!(但只有在问题发布24小时后才能这样做,如果我没记错的话)。祝好运!(所以应该是my_dict.items()|sort(attribute='1.name')
,对吗?) - hiro protagonist
{'xyz': {'name': 'A', 'is_sth': True}, 'abc': {'name': 'B', 'is_sth': True}}
- eyettea