2015-05-14 12 views
0

所以这里的交易。我有一些日志文件即时创建电子邮件。我使用一个列出日志文件内容的j​​inja模板。不过,我已决定添加一些数据指标,以显示最近几天日志的变化。好吧比较jinja2的元组的两个列表

我的数据保存为csv文件,我把它们作为[('string',int,int),(...)]形式的元组列表加载我知道怎么做是使用列表理解来比较'串'索引,如果它们相等,则检查元组中的最后一个int。如果该整数更大,我添加一个小箭头显示增加,如果更低,显示减少的箭头。

到目前为止,我有点想要做的事情。例如,这是我的填充表中的神社模板文件

{% 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 %} 

我还没有被添加条件,以显示一个向下的箭头,如果比较的结果是小于一段代码。

我想出了一个非常糟糕的功能来测试列表的比较。我对于它的工作状况并不感到厌恶。

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

你的功能有点奇怪(你为什么使用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 %} 

如果l1l2分别为new_listold_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元组的四元组的额外字段表示是否它的增大,减小,或静态的,你可以这样做:

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

然后将其传递到您的模板中。

+0

我想也许你是在正确的轨道这里,但我不明白你的代码中的几件事,即你传递给diff_to_int()的东西。什么是new_tuple [2]和old_tuple [2]?新的4-tple列表是一个好主意,所以它只是new_list的一个副本,增加或减少字段(1,0,-1)。我想也许列表理解需要重新工作。我试试它的一些变化。 – gandolf

+0

另外我想提一下,这两个列表可能不一定是相同的大小或具有完全相同的内容。只有在元组匹配中的两个字符串我们才会关心检查第二个int值的更改。 – gandolf