Как вывести элемент из словаря по его индексу как если бы в массиве?

У меня есть словарь

disciplines = {
    "mathAnalysis_lecture": "...",
    "mathAnalysis_practice": "...",
    "probabilityTheory_practice": "...",
    "introToSE_lecture": "...",
    "introToSE_practice": "..."
}

Можно ли достать элемент с ключом introToSE_lecture , только не по ключю, а по его индексу(3)? Или это вообще глупо и стоит использоваться массивы?


Ответы (1 шт):

Автор решения: Pak Uula

Вариант для 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 будет давать правильный результат.

→ Ссылка