2016-02-15 85 views
1

我有字典的列表:打印在模板(未分類)dictonary DJANGO

Dict = [ {'key1':'value1', 'key2':'value2','key3':'value3'}, 
     {'key1':'value4', 'key2':'value5','key3':'value6'}, 
     {'key1':'value7', 'key2':'value8','key3':'value9'}] 

我需要的順序進行顯示:

KEY1  KEY2 KEY3 
value1 value2 value3 
value4 value5 value6 
value7 value8 value9 

鍵有要打印的僅一次,按照這個順序。

現在我已經在這個模板的代碼,但值不與鍵柱相匹配:

<table border="1"> 
    <tr> 
     {% for k in listkey %} 
      <td>{{ k }}</td> 
     {% endfor %} 
    </tr> 
     {% for raw in dict %} 
     <tr> 
      {% for k,v in raw.items %} 
       <td>{{ v }}</td> 
      {% endfor %} 
     </tr> 
     {% endfor %} 
</table> 

在views.py:

listkeys = ['key1','key2','key3'] 

請幫我解決這個問題。謝謝!

回答

0

由於您已經注意到,python中的dict是未排序的,所以除非您在模板中明確指定要訪問哪個值,否則無法以任何順序循環dict。

你可以改變你的數據結構,而不是,建立一個列表的列表:

another_datastructure = [] 

for item in Dict: 
    # temp would hold value of key1, key2, key3 on current dict entry 
    temp = [] 
    for key in listkeys: 
     temp.append(Dict[key]) 
    another_datastructure.append(temp) 

現在,您的每個列表具有關鍵以下鍵1,鍵2 KEY3順序列表的列表。然後你可以循環使用並保證訂單。

+0

謝謝,但我避免這種情況的解決方案,因爲我可能需要獲得一個特定的值。但有了你的建議,我認爲我會構建兩個數據結構:一個僅用於在模板(列表列表)中顯示數據,另一個用於計算值(字典列表)。 – Simone

+0

哦,你的意思是你想在模板中獲得一個字典的具體價值?這可以通過{{dict.key1}}完成。選中此https://docs.djangoproject.com/en/1.9/ref/templates/api/#variables-and-lookups。 –

1

從您的Dict列表中,您可以創建包含key值的字典作爲您的密鑰,而value將爲以前列表的所有組合值的list

# use lowercase variable names and dont pick name like "list", "dict", "tuple" etc. 

from collections import defaultdict 

your_list = [{'key1':'value1', 'key2':'value2','key3':'value3'}, 
      {'key1':'value4', 'key2':'value5','key3':'value6'}, 
      {'key1':'value7', 'key2':'value8','key3':'value9'}] 

output = defaultdict(list) 
for d in your_list: 
    for key, value in d.items(): 
     output[key].append(value) 

和輸出將

defaultdict(list, 
      {'key1': ['value1', 'value4', 'value7'], 
      'key2': ['value2', 'value5', 'value8'], 
      'key3': ['value3', 'value6', 'value9']}) 

關於小寫的變量名PEP-8