python和Django:如何打印具有特定键规则的字典

2024-09-25 12:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我构建了这样的数据结构:

{ level: [ event1, event2... ] }

level是以下之一:C(代表临界)、H(代表高)、M(代表中)、L(代表低)。在

我想根据级别打印django模板中的所有事件,首先是C(临界),然后是H(高)、M(中)、L(低)。但是,默认情况下,我有:

^{pr2}$

我想先把字典打印出来吗?还是应该将其转换为其他数据结构?谢谢。在

编辑: 我认为史蒂夫的方法很管用。它将字典转换为列表,字典的每个条目都成为一个元组:

[ (level1: [event1, event2 ...]), (level2: [event3, event4 ...]) ]

Tags: django方法模板编辑数据结构列表字典事件
3条回答

字典没有排序,因此需要先将它们转换为元组列表:

分类如下:

level_values = {'C':0, 'H':1, 'M':2, 'L':3}
sorted_dictionary = sorted(dictionary.items(), key=lambda x: level_values[x[0]])

然后传入排序后的_dictionary变量,并以与之前相同的方式循环:

^{pr2}$

对重要声明的进一步解释:

sorted_dictionary = sorted(dictionary.items(), key=lambda x: level_values[x[0]])

dictionary.items()给你一个元组列表,代表你原来的字典。所以不用像这样的字典:

{'A':[1,2,3], 'B',[4,5,6]}

如果为字典中的每个键/值对提供元组列表:

[('A', [1,2,3]), ('B', [4,5,6])]

你可以把元组看作是一个不能更改的列表(据说它是“不可变的”)。在

然后将这个元组列表传递给sorted函数。对于列表中的每个元组,sorted()调用我们提供的lambda表达式来请求排序键。我们的lambda表达式只需获取元组中的第一个元素(即severity值),并访问level_values字典来查找它的排序值。在

您可以逐个遍历结果sorted_dictionary(它是一个元组列表)中的一个元组:

for value in sorted_dictionary:
     print value[0]
     print str(value[1])

或者Python将允许您自动将tuble拆分为单独的变量:

for severity, events in sorted_dictionary:
     print severity
     print str(events)

Pythondict没有排序。您需要将其转换为一个列表,并对其进行排序。在

converted = [
    ('C', mydict['C']),
    ('H', mydict['H']),
    ('M', mydict['M']),
    ('L', mydict['L']),
]

然后在模板中:

^{pr2}$

或者,对于原始数据结构,只需循环查看每个类别:

{% for event in dictionary.C %}
    do something with event, this is for Critical
{% endfor %}
{% for event in dictionary.H %}
    do something with event, this is for High
{% endfor %}
{% for event in dictionary.M %}
    do something with event, this is for Medium
{% endfor %}
{% for event in dictionary.L %}
    do something with event, this is for Low
{% endfor %}

你需要把它转换成其他的数据结构。最简单的方法是将已经排序的列表列表[low_levels, medium_levels, high_levels]或您喜欢的任何方式传递到模板中,而不是使用字典。如果可以的话,也可以用它来表示事件。在

相关问题 更多 >