Ответ 1
То, как вы это делаете, не будет работать, потому что, как только вы используете {% for team in league %}
, вы уже используете unsorted dict и извлекаете из него пару ключей, значение.
Я думаю, что |dictsort
может не помочь вам в этом случае, потому что вы не можете сортировать ни по ключу, ни по значению, а по значению (субдикта) для "totalpts".
Вместо этого вы должны отсортировать этот словарь до, передав его в шаблон, следующим образом:
>>> 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})])
Чтобы отсортировать dict, мы преобразуем его в список кортежей (key, value) с помощью .items()
. Предполагая, что x является одним из таких кортежей, x [1] содержит словарь с ключом "totalpts".
>>> league.items()[0]
('Fc Paris', {'id': 1538051, 'rank': 2, 'totalpts': 396}) # = x
Итак, теперь мы сортируем кортежи с помощью x[1]['totalpts']
, используя reverse=True
для убывающего порядка.
Сам dict не может быть отсортирован, это неупорядоченный тип данных. Вы можете либо использовать OrderedDict
, либо просто использовать кортежи:
>>> 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})]