#python #sorting #dictionary #defaultdict
#python #сортировка #словарь #defaultdict
Вопрос:
У меня есть словарь списков, которые мне нужно отсортировать по первому значению в списке. Я использую defaultdict.
from collections import defaultdict
Dict = defaultdict(list)
Dict['A'].append([100, 'abcd'])
Dict['A'].append([50, 'bgfd'])
Dict['A'].append([150, 'abcd'])
Мне нужно выполнить итерацию по словарю упорядоченным образом, чтобы я получил:
for Entry in Dict['A']:
print Entry
Должно дать:
[50, 'bgfd']
[100, 'abcd']
[150, 'abcd']
Комментарии:
1. Вы не можете сортировать словари, они неупорядочены. Что вы хотите сделать, так это отсортировать значения списка в
defaultdict(list)
. Это нормально, поскольку списки упорядочены . Вы можете получить отсортированную копию записи, используяsorted(Dict['A'])
, или вы могли бы фактически изменить порядок содержимого одной из них, используяDict['A'].sort()
.
Ответ №1:
Просто используйте sorted
и сортируйте список, хранящийся в Dict['A']
:
>>> from collections import defaultdict
>>> Dict = defaultdict(list)
>>> Dict['A'].append([100, 'abcd'])
>>> Dict['A'].append([50, 'bgfd'])
>>> Dict['A'].append([150, 'abcd'])
>>>
>>> for Entry in sorted(Dict['A']):
... print Entry
...
[50, 'bgfd']
[100, 'abcd']
[150, 'abcd']
>>>
Ответ №2:
Значение — это просто список, поэтому вы можете отсортировать его с помощью sorted()
:
for Entry in sorted(Dict['A']):
print Entry
Сортировка является лексикографической по содержимому списка; поэтому сначала порядок определяется по list_a[0]
vs list_b[0]
, затем, если они совпадают, сравниваются элементы 1 и т.д.
Все это не имеет ничего общего с defaultdict
, это просто контейнер для ключей и значений, но вы уже извлекли значение.
ДЕМОНСТРАЦИЯ:
>>> from collections import defaultdict
>>> Dict = defaultdict(list)
>>> Dict['A'].append([100, 'abcd'])
>>> Dict['A'].append([50, 'bgfd'])
>>> Dict['A'].append([150, 'abcd'])
>>> sorted(Dict['A'])
[[50, 'bgfd'], [100, 'abcd'], [150, 'abcd']]