Как вывести элемент из словаря по его индексу как если бы в массиве?
У меня есть словарь
disciplines = {
"mathAnalysis_lecture": "...",
"mathAnalysis_practice": "...",
"probabilityTheory_practice": "...",
"introToSE_lecture": "...",
"introToSE_practice": "..."
}
Можно ли достать элемент с ключом introToSE_lecture , только не по ключю, а по его индексу(3)? Или это вообще глупо и стоит использоваться массивы?
Ответы (1 шт):
Вариант для Python 3.6 и моложе
Начиная с Python 3.6 в канонической реализации Python порядок добавления элементов в словарь сохраняется. То есть итератор items() возвращает элементы в том порядке, в котором они были добавлены.
Если у вас гарантированно используется Python 3.6+, то вы можете использовать вот такую функцию (неоптимизировано!)
def nth_discipline(pos):
"Возвращает пару (название, описание) из словаря disciplines для курса на n-ной позиции."
items = list(disciplines.items())
return items[pos]
Вариант универсальный
Практически с самого начала в Python был специальный тип OrderedDict, который сохранял порядок добавления.
Поэтому если вы не уверены в том, на какой версии Python будет исполняться ваш код, то лучше воспользоваться им:
from collections import OrderedDict
disciplines = OrderedDict([
("mathAnalysis_lecture", "MAL"),
("mathAnalysis_practice", "MAP"),
("probabilityTheory_practice", "PTP"),
("introToSE_lecture", "ISE_L"),
("introToSE_practice", "ISE_P")
])
Правда, ни keys, ни items, ни values для OrderedDict не поддерживают взятие элемента по индексу. Поэтому даже для OrderedDict нужна функция nth_discipline. Просто в случае OrderedDict она на всех реализациях Python будет давать правильный результат.