我是编程方面的新手,我在django遇到了一个问题。
所以我正在尝试根据值对字典进行排序。我尝试过这里看到的几种方法,但事情对我来说没什么用。它制作了字典,但我不知道它为什么不排序。
所以'scoruri'是字典:在html中使用时它会显示如下{User:alex_py:6,User:ion:3,User:lil:1,User:sss:1,User:ddd:1 ,用户:bbb:7},'结果'是每个'用户'(键)的分数。 当我打印scoruri类型时,它会打印6次(输入'dict')
有可能每个键:scoruri中的值实际上是一个字典,所以我有一本字典词典?
以下是我尝试排序的方法。
views.py
def home(request):
data = dict()
data['users'] = User.objects.all()
data['scoruri'] = dict()
if request.method == "POST":
for key in request.POST:
if 'nota_' in key:
nota_acordata = Punctaj.objects.filter(acordat_de=request.user,
acordat_catre__id=key.split('_')[1]).first()
if nota_acordata:
nota_acordata.nota = request.POST.get(key)
nota_acordata.save()
else:
Punctaj.objects.create(acordat_de=request.user,
acordat_catre_id=key.split('_')[1],
nota=request.POST.get(key))
messages.success(request, "Successfully Voted")
return redirect('home')
for user in data['users']:
suma = Punctaj.objects.filter(acordat_catre=user).aggregate(punctaj=Sum('nota')).get("punctaj")
count = Punctaj.objects.filter(acordat_catre=user).count()
if not suma:
result = 0
else:
result = int(suma)/count
data['scoruri'][user] = result
# sorted(data['scoruri'].items())
# rezultate = sorted(data['scoruri'].items(), key=operator.itemgetter(1))
print(type(data['scoruri']))
return render(request, "login/home.html", data)
模板
{{ scoruri }}
<!--{{ rezultate }}-->
<!--{% for key, value in scoruri %}-->
<!--{{ key }}:{{ value }}-->
<!--{% endfor %}-->
答案 0 :(得分:2)
您应该使用保留广告订单而不是OrderedDict
的{{1}}。 https://docs.python.org/2/library/collections.html
dict
在模板中
from collections import OrderedDict
def home(request):
data = dict()
data['users'] = User.objects.all()
data['scoruri'] = dict()
if request.method == "POST":
for key in request.POST:
if 'nota_' in key:
nota_acordata = Punctaj.objects.filter(acordat_de=request.user,
acordat_catre__id=key.split('_')[1]).first()
if nota_acordata:
nota_acordata.nota = request.POST.get(key)
nota_acordata.save()
else:
Punctaj.objects.create(acordat_de=request.user,
acordat_catre_id=key.split('_')[1],
nota=request.POST.get(key))
messages.success(request, "Successfully Voted")
return redirect('home')
for user in data['users']:
suma = Punctaj.objects.filter(acordat_catre=user).aggregate(punctaj=Sum('nota')).get("punctaj")
count = Punctaj.objects.filter(acordat_catre=user).count()
if not suma:
result = 0
else:
result = int(suma)/count
data['scoruri'][user] = result
# sorted(data['scoruri'].items())
# sorting and puting result into OrderedDict
data['scoruri'] = OrderedDict(sorted(data['scoruri'].items(), key=operator.itemgetter(1)))
print(type(data['scoruri']))
return render(request, "login/home.html", data)
答案 1 :(得分:0)
您无法对字典进行排序,您可以对字典的表示进行排序。字典有一个随机的有序成员。
您可以从dict成员列出元组列表:
import operator
dict = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_dict = sorted(dict.items(), key=operator.itemgetter(1))
我希望这会有所帮助。