Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶金佳2按键记录数值_Python_Json_Loops_Dictionary_Jinja2 - Fatal编程技术网

Python 烧瓶金佳2按键记录数值

Python 烧瓶金佳2按键记录数值,python,json,loops,dictionary,jinja2,Python,Json,Loops,Dictionary,Jinja2,我有一份目录: [{'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'

我有一份目录:

[{'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>
第1行第1行的编号:1:2 3 4。。。
第2行数字代表第1行:1 2 3 4。。。
第#3行第#1:1 2 3 4行的数字。。。

我需要Div,因为dict中有许多唯一的行。

一个选项是重新设置字典,使键是行,值是数字,然后很容易循环使用这个新字典并构造Div:


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'])
现在您有了一个
行_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 %}
{row_dict.keys()中的行的%sort%}
行{{row}的行{{row}编号
{{'。连接(行[row])}
{%endfor%}

如何按int(每行中的行和数字)对其进行排序?您可以尝试对result.items()中的k,v使用此
{k:sorted(v,key=int)}
-对数字有效,但对行无效。Jinja内部的代码:{result|sort%}row{{row}编号:{{{'。join(result[row])}{%endfor%}最后一个问题,我如何对result中的行和数字进行排序,它包含int和字符串,如['2',False],'13',False]?我得到:TypeError:int()参数必须是字符串、类似于对象的字节或数字,而不是“list”。python中的字典是无序的,也就是说,你不能保证键的顺序,所以你不能按键对字典排序,如果你想让结果按行排序,你需要一个或一个元组列表。例如
排序((k,sorted(v,key=int))对于result.items()中的k,v
提供了一个元组列表,这些元组按第一个元素排序,第二个元素(list)也已排序,通过此数据结构的循环应始终提供有序的结果。
{% for row in row_dict.keys()|sort %}
<div class='row'>row#{{ row }} numbers for row #{{ row }}
  {{ ' '.join(row_dict[row]) }}</div>
{% endfor %}