所以这是交易。我有一些日志文件,我用来创建一个电子邮件。我使用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">▲</span>{{f}}</td>
<td class="tg-031e">{{r}}</td>
<td class="tg-031e">{{u}}</td>
</tr>
{% 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
我想要的是一种比较这两个列表的第三个整数的方法,并动态地将范围添加到表中,说明增加或减少。谢谢,我希望我说得对。
答案 0 :(得分:0)
你的功能有点奇怪(你为什么使用yield
?),但它主要在那里;只有,如果我理解正确,你真的想要在数据中添加第四个字段,这样你就可以这样做:
{% for f,r,u, inc_dec in four_tuples %}
<tr>
<td class="tg-031e"><span style="color:blue;font- weight:bold">▲</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 %}
如果l1
和l2
分别为new_list
和old_list
,那么您应该可以执行以下操作:
def diff_to_int(a, b):
if a < b:
return -1
elif a == b:
return 0
else:
return 1
def change(new_list, old_list):
"""
:type new_list: list[(str, int, int)]
:type old_list: list[(str, int, int)]
:rtype list[int]
"""
return [diff_to_int(new_tuple[2], old_tuple[2])
for new_tuple, old_tuple
in zip(new_list, old_list)]
inc_dec_list = change(new_data, old_data)
然后,为了使你的每个3元组成为一个带有额外字段的4元组,显示它是增加,减少还是静态,你可以这样做:
four_tuples = [(a, b, c, inc_dec_static)
for (a, b, c), inc_dec_static
in zip(new_data, inc_dec_list)]
然后将其传递到您的模板中。