我有dicts列表:
[{'row': '1', 'number': '5'}, {'row': '1', 'number': '10'}, {'row': '1', 'number': '3'}, {'row': '1', 'number': '7'}, {'row': '1', 'number': '2'}, {'row': '1', 'number': '13'}, {'row': '1', 'number': '6'}, {'row': '1', 'number': '12'}, {'row': '1', 'number': '1'}, {'row': '1', 'number': '8'}, {'row': '1', 'number': '9'}, {'row': '1', 'number': '11'}, {'row': '1', 'number': '15'}, {'row': '1', 'number': '14'}, {'row': '1', 'number': '4'}, {'row': '2', 'number': '1'}, {'row': '2', 'number': '4'}, {'row': '2', 'number': '10'}...]
我想通过jinja中的循环进行迭代,并在特定行#
内打印数字这样的事情:
<div class='row'>row#1 numbers for row #1: 1 2 3 4 ... </div>
<div class='row'>row#2 numbers for row #1: 1 2 3 4 ... </div>
<div class='row'>row#3 numbers for row #1: 1 2 3 4 ... </div>
我在dict中需要divs尽可能多的唯一行。
答案 0 :(得分:2)
一个选项是重新整形你的字典,使得键是行,值是数字,然后很容易遍历这个新字典并构造 divs :
result = {}
for d in dd: # dd is your list of dictionaries here
result.setdefault(int(d['row']), []).append(d['number'])
result
#{'1': ['5',
# '10',
# '3',
# '7',
# '2',
# '13',
# '6',
# '12',
# '1',
# '8',
# '9',
# '11',
# '15',
# '14',
# '4'],
# '2': ['1', '4', '10']}
答案 1 :(得分:1)
Jinja2将很难自己做到这一点。您希望将每行的所有数字聚合到一个列表中,然后将该列表打印出来。我建议分两步执行此操作。
row_dict = {}
for num_dict in list_of_dicts:
row = num_dict['row']
if row not in row_dict:
row_dict[row] = []
row_dict[row].append(num_dict['number'])
现在你有row_dict
看起来像:
{
'1': ['5', '10', '3', '7', '2', '13', '6', '12', '1', '8', '9', ...],
'2': ['1', '4', '10', ...],
}
Jinja2可以打印出来。您可以编写一个类似这样的模板:
{% for row in row_dict.keys()|sort %}
<div class='row'>row#{{ row }} numbers for row #{{ row }}
{{ ' '.join(row_dict[row]) }}</div>
{% endfor %}