Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中对词典进行排序?_Django_Python 3.x_Sorting_Dictionary_Django Views - Fatal编程技术网

如何在django中对词典进行排序?

如何在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

我是编程新手,在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

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确实阅读了有关更新模板的部分。重读我的答案