簡體   English   中英

python和django:如何使用鍵上的特定規則打印字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM