如何在django中对词典进行排序?
我是编程新手,在django遇到了一个问题 因此,我尝试根据值对字典进行排序。我尝试过这里所见的几种方法,但事实上对我来说什么都不管用。制作这本词典很有效,但我不知道为什么它不分类 所以“scoruri”就是字典:当在html中使用它时,它显示如下{User:alex_py:6,User:ion:3,User:lil:1,User:sss:1,User:ddd:1,User:bbb:7},'result'是每个“User”(键)的分数。 当我打印scoruri类型时,它会打印6次(键入“dict”) scoruri中的每个key:value可能实际上是一个字典,所以我有一个字典字典 下面是我尝试过的分类方法 views.py如何在django中对词典进行排序?,django,python-3.x,sorting,dictionary,django-views,Django,Python 3.x,Sorting,Dictionary,Django Views,我是编程新手,在django遇到了一个问题 因此,我尝试根据值对字典进行排序。我尝试过这里所见的几种方法,但事实上对我来说什么都不管用。制作这本词典很有效,但我不知道为什么它不分类 所以“scoruri”就是字典:当在html中使用它时,它显示如下{User:alex_py:6,User:ion:3,User:lil:1,User:sss:1,User:ddd:1,User:bbb:7},'result'是每个“User”(键)的分数。 当我打印scoruri类型时,它会打印6次(键入“dict
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 %}-->
{{scoruri}
您不能对字典进行排序,您可以对字典的表示形式进行排序。字典有一个随机排序的成员
您可以从dict成员中创建元组列表:
import operator
dict = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_dict = sorted(dict.items(), key=operator.itemgetter(1))
我希望这有帮助。你不能对字典排序,你可以对字典的表示进行排序。字典有一个随机排序的成员 您可以从dict成员中创建元组列表:
import operator
dict = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_dict = sorted(dict.items(), key=operator.itemgetter(1))
我希望这有帮助。您应该使用保留插入顺序的
orderedict
,而不是dict
和在模板中
{% for key, value in scoruri.items %}
{{ key }}:{{ value }}
{% endfor %}
您应该使用保留插入顺序的
orderedict
,而不是dict
和在模板中
{% for key, value in scoruri.items %}
{{ key }}:{{ value }}
{% endfor %}
12月的某个时候,Python3.6将发布,它的字典总是默认排序!可能与hi重复,我尝试过:它的注释为rezultate=sorted(data['scoruri'].items(),key=operator.itemgetter(1)),当我在模板中使用{{rezultate}}时,它不会显示任何内容。12月的某个时候,Python 3.6将发布,其中包含默认情况下总是排序的词典!hi的可能重复,我尝试过:它的注释是rezultate=sorted(data['scoruri'].items(),key=operator.itemgetter(1)),当我在模板中使用{rezultate}时,它不会显示任何内容。如果我这样做:sorted_dict=sorted(data['scoruri'].items(),key=operator.itemgetter(1))并在html中使用{sorted_dict},它没有显示任何内容。如果我这样做:sorted_dict=sorted(data['scoruri'].items(),key=operator.itemgetter(1))并在html中使用{sorted_dict}},它就没有显示任何内容。我真的不需要这个,我对此感到愤怒,我只想根据每个用户的分数来排序字典,就这样。好了,现在如果我像你一样做,我将得到“int”对象没有属性“rate”的错误,之后我尝试不使用它:OrderedDict(排序(data['scoruri'].items(),key=lambda i:i[1]),它工作了,它对它们进行了排序,但输出结果正好是这样的:OrderedDict([(,1),(,1),(,1),(,3),(,6),(,7)],如果我从代码中获得OrderedDict,它会给我这样的信息:列表索引必须是整数,而不是用户,所以它对它们进行排序,但它在那里输出OrderedDictaswell@NitaAlexandru很抱歉固定的应该是
data['scoruri']=orderedict(排序(data['scoruri'].items(),key=lambda i:i[1])
或data['scoruri']=orderedict(排序(data['scoruri'].items(),key=operator.itemgetter(1))
hm。。。无论采用哪种方式,它都会显示如下:@NitaAlexandru确实阅读了有关更新模板的部分。重新阅读我的回答好吧,我并不需要这个,我对此很恼火,我只想按照每个用户的分数来排序字典,就这样。好吧,现在如果我像你一样做,我会得到一个错误,因为“int”对象没有属性“rate”,之后我尝试不使用它:OrderedDict(排序(data['scoruri'.items(),key=lambda i:i[1]),它成功了,它对它们进行了排序,但输出是这样的:OrderedDict([(,1),(,1),(,1),(,1),(,3),(,6),(,7)],如果我从代码中获得OrderedDict,它会给我这样的结果:列表索引必须是整数,而不是用户,所以它对它们进行排序,但它在那里输出OrderedDictaswell@NitaAlexandru很抱歉固定的应该是data['scoruri']=orderedict(排序(data['scoruri'].items(),key=lambda i:i[1])
或data['scoruri']=orderedict(排序(data['scoruri'].items(),key=operator.itemgetter(1))
hm。。。无论采用哪种方式,它都会显示如下:@NitaAlexandru确实阅读了有关更新模板的部分。重读我的答案