[英]python and django: How to print a dictionary with specific rule on keys
我建立了這樣的數據結構:
{ level: [ event1, event2... ] }
該level
是以下level
之一:C(代表臨界),H(代表高),M(代表中度),L(代表低)。
我想根據級別在django模板中打印所有事件,首先顯示C(關鍵),然后顯示H(高),M(中),L(低)。 但是,默認情況下,這就是我所擁有的:
{% for level, events in dictionary.items %}
{% for event in events %}
do something with level, event
{% endfor %}
{% endfor %}
我先打印了H(高),然后打印了C(關鍵),等等。我想問:如何按特定順序循環字典? 還是應該將其轉換為其他數據結構? 謝謝。
編輯:我認為史蒂夫的方法很好。 它將字典轉換成列表,字典的每個條目都變成一個元組:
[ (level1: [event1, event2 ...]), (level2: [event3, event4 ...]) ]
字典沒有順序,因此您首先需要將它們轉換為元組列表:
對其排序如下:
level_values = {'C':0, 'H':1, 'M':2, 'L':3}
sorted_dictionary = sorted(dictionary.items(), key=lambda x: level_values[x[0]])
然后傳入您的sorted_dictionary變量,並以與以前相同的方式循環它:
{% for level, events in sorted_dictionary %}
{% for event in events %}
do something with level, event
{% endfor %}
{% endfor %}
重要聲明的進一步說明:
sorted_dictionary = sorted(dictionary.items(), key=lambda x: level_values[x[0]])
dictionary.items()
為您提供一個元組列表,代表您的原始詞典。 因此,而不是像這樣的字典:
{'A':[1,2,3], 'B',[4,5,6]}
if為您提供元組列表,針對字典中的每個鍵/值對:
[('A', [1,2,3]), ('B', [4,5,6])]
您可以將元組視為無法更改的列表(據說是“不可變的”)。
然后將此元組列表傳遞到已sorted
函數中。 對於列表中的每個元組, sorted()
調用我們提供的lambda表達式以請求排序鍵。 我們的lambda表達式僅獲取元組中的第一個元素(即嚴重性值),並訪問level_values
字典為其查找排序值。
您可以逐個元組遍歷生成的sorted_dictionary
(這是一個元組列表):
for value in sorted_dictionary:
print value[0]
print str(value[1])
或Python將讓您自動將細管分割成單獨的變量:
for severity, events in sorted_dictionary:
print severity
print str(events)
您需要將其轉換為其他數據結構。 最簡單的方法是,將字典( [low_levels, medium_levels, high_levels]
或您希望的列表)排序而不是字典,而不是字典,然后對其進行迭代。 如果可以的話,最好將其用作事件的表示形式。
Python dict
沒有排序。 您需要將其轉換為列表,然后對其進行排序。
converted = [
('C', mydict['C']),
('H', mydict['H']),
('M', mydict['M']),
('L', mydict['L']),
]
然后在模板中:
{% for level, events in converted %}
{% for event in events %}
do something with level, event
{% endfor %}
{% endfor %}
或者,使用原始數據結構,只需遍歷每個類別:
{% 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 %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.