2016-12-29 19 views
0

我遇到了以下問題:對於我的webapp,我創建了一個頁面,顯示前10名海報用戶在我的網站上發佈了多少評論。DJANGO:按值排序字典(併發送到模板)

(在格式Username - Number_of_reviews

的信息被傳遞給模板作爲字典中,由下面的函數在view.py產生:

DEF hall_of_game(請求):

(....) 

review_histogram = {} 
most_reviews = {} 
for x in Vote.objects.all(): 
    review_histogram[x.voter] = review_histogram.get(x.voter, 0) + 1 
sorted_list = [] 
for key, value in review_histogram.items(): 
    sorted_list.append((value, key)) 
    sorted_list.sort(reverse=True) 
return render(request, 'list/hall_of_fame.html', {(....), 'sorted': sorted_list}) 

模板然後轉向字典轉爲有序列表

<ol> 
{% for v, k in sorted|slice:":10" %} 
<li>{{ k }} - {{ v }}</li> 
{% endfor %} 
</ol> 

但是,當2個或更多用戶具有相同數量的評論時,該函數不能再對列表進行排序,並且崩潰,從而引發類型錯誤。

類型錯誤 unorderable類型:用戶()<用戶()

我試圖通過將列表在排序的時刻「嘗試/除了」循環解決了這個問題,雖然這樣可以防止崩潰,這也可防止從排序列表。

我覺得我忽略了顯而易見的事情,但對於我的生活我無法弄清楚如何解決這個問題。

回答

2

給出的排序調用按鍵功能來告訴它僅由元組的第一個元素進行排序:

for key, value in review_histogram.items(): 
    sorted_list.append((value, key)) 
sorted_list.sort(key=lambda x: x[0], reverse=True) 

還要注意調用應該是外循環,否則你在每個不必要的排序迭代。

+0

謝謝!這解決了我的問題。我也將循環外的.sort()調用拉出來,感謝快速響應! – Jasper