Python 比较jinja2的两个元组列表

Python 比较jinja2的两个元组列表,python,list,jinja2,list-comprehension,Python,List,Jinja2,List Comprehension,这就是交易。我有一些我用来创建电子邮件的日志文件。Im使用jinja模板列出日志文件的内容。不过,我决定添加一些数据指标,其中显示了与“最后几天”日志的更改。嗯 我的数据保存为csv文件,并以[('string',int,int),(…)的形式作为元组列表加载它们。我知道如何使用列表理解来比较“string”索引,如果它们相等,则检查元组中的最后一个int。如果这个整数更大,我加上一个小箭头,显示增加,如果低,显示减少的箭头 到目前为止,我已经有了一些我想做的事情。例如,这是在jinja模板文件

这就是交易。我有一些我用来创建电子邮件的日志文件。Im使用jinja模板列出日志文件的内容。不过,我决定添加一些数据指标,其中显示了与“最后几天”日志的更改。嗯

我的数据保存为csv文件,并以[('string',int,int),(…)的形式作为元组列表加载它们。我知道如何使用列表理解来比较“string”索引,如果它们相等,则检查元组中的最后一个int。如果这个整数更大,我加上一个小箭头,显示增加,如果低,显示减少的箭头

到目前为止,我已经有了一些我想做的事情。例如,这是在jinja模板文件中填充我的表的一段代码

  {% for f,r,u in data %}
  <tr>
    <td class="tg-031e"><span style="color:blue;font-weight:bold">&#9650</span>{{f}}</td>
    <td class="tg-031e">{{r}}</td>
    <td class="tg-031e">{{u}}</td>
  </tr>
  {% endfor %}
{%表示数据%中的f、r、u}
▲{{f}
{{r}}
{{u}
{%endfor%}
如果比较结果小于,我还没有添加条件以显示向下箭头

我想出了一个非常糟糕的函数来测试列表的比较。我不知道它的效果如何

def change(l1, l2):
    inc = [x[0] for x,y in zip(l1,l2) if x[0] == y[0] and x[2] > y[2] ]
    dec = [x[0] for x,y in zip(l1,l2) if x[0] == y[0] and x[2] < y[2] ]
    yield inc, dec
def更改(l1、l2):
inc=[x[0]表示x,如果x[0]==y[0]和x[2]>y[2]]
如果x[0]==y[0]和x[2]

我想要的是一种方法来比较这两个列表中的第三个整数,并动态地将跨度添加到表中,说明增加或减少。谢谢你,我希望我问的没错。

你的函数有点奇怪(为什么要使用
yield
?),但它基本上是存在的;只是,如果我理解正确,您确实希望向数据中添加第四个字段,这样您就可以执行以下操作:

{% for f,r,u, inc_dec in four_tuples %}
<tr>
  <td class="tg-031e"><span style="color:blue;font-  weight:bold">&#9650</span>{{f}}</td>
  <td class="tg-031e">{{r}}</td>
  <td class="tg-031e">{{u}}</td>
  <td>
  {% if inc_dec == -1 %}
      <!-- show decrease image -->
  {% else if inc_dec == 1 %}
      <!-- show increase image -->
  {% endif %}
  </td>
</tr>
{% endfor %}
然后,要使每个3元组成为4元组,并带有一个额外字段,显示其是增加、减少还是静态,可以执行以下操作:

four_tuples = [(a, b, c, inc_dec_static) 
               for (a, b, c), inc_dec_static
               in zip(new_data, inc_dec_list)]

然后将其传递到模板中。

我认为您在这里的思路可能是正确的,但是我不理解代码中的一些内容,即传递给diff_to_int()的内容。新元组[2]和旧元组[2]的作用是什么?新的4-tple列表是一个好主意,因此它只是新的_列表的一个副本,添加了增加、减少或不增加字段(1,0,-1)。我想也许这个列表需要修改。我会尝试一下它的一些变体。我还想提到的是,这两个列表可能不一定大小相同或内容完全相同。只有元组中的两个字符串匹配,我们才需要检查第二个int值的变化。
four_tuples = [(a, b, c, inc_dec_static) 
               for (a, b, c), inc_dec_static
               in zip(new_data, inc_dec_list)]