Ich lerne immer noch jinja2 und flask und habe Schwierigkeiten, dictsort in jinja2 zu verwenden.
Also übergebe ich dieses Diktat in eine jinja2-Vorlage:
{'PEDD United': {'id': 37828, 'rank': 12, 'totalpts': 307},'Fc Mbonabushia': {'id': 205633, 'rank': 6, 'totalpts': 356},'FC Slurp': {'id': 933573, 'rank': 11, 'totalpts': 312},'KFC_Overijse': {'id': 38861, 'rank': 5, 'totalpts': 362},'Fc Paris': {'id': 1538051, 'rank': 2, 'totalpts': 396}}
Ich möchte eine Tabelle erstellen, die nach dem Wert des Schlüssels 'totalpts' sortiert ist. Ich habe alle möglichen Dinge ausprobiert und es werden beim "Sortieren" einfach keine Totalpten berücksichtigt.
Hier ist einer meiner Codes:
<table class="table table-bordered">
{% for team in league %}
<tr>
<td>{{team}}</td>
{% for data in league[team]|dictsort(league[team]['totalpts']) %}
<td>{{ league[team]['totalpts'] }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Dadurch sortiert es in diesem Fall nichts ... Drucken Sie einfach den Wert in der Tabelle ohne Reihenfolge ...
Kann mir jemand helfen?
Vielen Dank
3 Antworten
Die Art und Weise, wie Sie dies tun, funktioniert nicht, da Sie, sobald Sie {% for team in league %}
verwenden, bereits das unsortierte Diktat verwenden und das Schlüssel-Wert-Paar daraus extrahieren.
Ich denke, |dictsort
kann Ihnen in diesem Fall möglicherweise nicht weiterhelfen, da Sie weder nach Schlüssel noch nach Wert sortieren können, sondern nach dem Wert des Werts (Unterdikts) für 'Totalpts'.
Stattdessen sollten Sie dieses Wörterbuch sortieren, bevor Sie es wie folgt an die Vorlage übergeben:
>>> from collections import OrderedDict
>>> league={'PEDD United': {'id': 37828, 'rank': 12, 'totalpts': 307},'Fc Mbonabushia': {'id': 205633, 'rank': 6, 'totalpts': 356},'FC Slurp': {'id': 933573, 'rank': 11, 'totalpts': 312},'KFC_Overijse': {'id': 38861, 'rank': 5, 'totalpts': 362},'Fc Paris': {'id': 1538051, 'rank': 2, 'totalpts': 396}}
>>> league = OrderedDict(sorted(league.items(), key= lambda x: x[1]['totalpts'], reverse=True))
>>> print league
OrderedDict([('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}), ('KFC_Overijse', {'id': 38861, 'rank': 5, 'totalpts': 362}), ('Fc Mbonabushia', {'id': 205633, 'rank': 6, 'totalpts': 356}), ('FC Slurp', {'id': 933573, 'rank': 11, 'totalpts': 312}), ('PEDD United', {'id': 37828, 'rank': 12, 'totalpts': 307})])
Um das Diktat zu sortieren, konvertieren wir es mit .items()
in eine Liste von Tupeln von (Schlüssel, Wert). Angenommen, x ist ein solches Tupel, enthält x [1] das Wörterbuch mit dem Schlüssel 'totalpts'.
>>> league.items()[0]
('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}) # = x
Jetzt sortieren wir die Tupel mit x[1]['totalpts']
und reverse=True
in absteigender Reihenfolge.
Ein Diktat selbst kann nicht sortiert werden, es ist ein ungeordneter Datentyp. Sie können entweder ein OrderedDict
oder einfach Tupel verwenden:
>>> sorted(league.items(), key= lambda x: x[1]['totalpts'], reverse=True)
[('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}), ('KFC_Overijse', {'id': 38861, 'rank': 5, 'totalpts': 362}), ('Fc Mbonabushia', {'id': 205633, 'rank': 6, 'totalpts': 356}), ('FC Slurp', {'id': 933573, 'rank': 11, 'totalpts': 312}), ('PEDD United', {'id': 37828, 'rank': 12, 'totalpts': 307})]
Sie können die Elemente eines Diktats mit dem normalen sort
filtern.
Verwenden Sie zum Sortieren nach Schlüssel attribute=0
:
{% for key, value in data.items()|sort(attribute='0') %}
{{ key }}: {{ value }}
{% endfor %}
Verwenden Sie zum Sortieren nach Wert attribute=1
{% for key, value in data.items()|sort(attribute='1') %}
{{ key }}: {{ value }}
{% endfor %}
Verwenden Sie attribute=1.name
, um nach einem Attribut der Werte zu sortieren
{% for key, value in data.items()|sort(attribute='1.name') %}
{{ key }}: {{ value }}
{% endfor %}
Das ist die Schleife in der Frage, in die übersetzt wird
{% for team_name, team_attrs in league.items()|sort(attribute='1.totalpts') %}
<td>{{ team_attrs.totalpts }}</td>
{% endfor %}
Sie können es mithilfe von sorted
nach geordneter Liste sortieren:
league = sorted(league, key= lambda x: -league[x]['totalpts'])
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.