Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Пройтись по ключам начиная с определенного. Словарь python

#python #python_3x #словари


Есть следующий код:

dic = {'A':213, 'B':1424, 'F':412, 'Gs':asf}
for key in dic:
    print(key)


Как можно проитерировать его, начиная со второго ключа?
Или, например, с ключа F?
    


Ответы

Ответ 1



В CPython реализации Python 3.6 элементы словаря сохраняют порядок данный им при создании. Это деталь реализации, не гарантированная стандартом языка. Начиная с Python 3.7 - это гарантированное поведение для любой реализации Python: the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec. Соответственно, для Python 3.7+ вы можете сделать: In [6]: list(dic.keys())[2:] Out[6]: ['F', 'Gs'] Для более ранних версий вы можете воспользоваться OrderedDict, как вам уже посоветовал @Хачатур Саркисян: In [9]: from collections import OrderedDict In [10]: odic = OrderedDict(dic) In [11]: list(odic.keys())[2:] Out[11]: ['F', 'Gs']

Ответ 2



Словари в Python являются неупорядоченными структурами данных. Обращение по ключу происходит за счет хэширования. Именно поэтому ваш вопрос не имеет под собой основания. Чтобы реализовать нечто похожее используйте структуру данных OrderedDict.

Ответ 3



Как уже было сказано, ключи в словаре не имеют определенного порядка. Если нужно пройтись по ключам в лексикографическом порядке, то такое решение: Сортируем ключи, потом проходимся по ним. Пока не встретили ключ F - ничего не печатаем. dic = {'A': 213, 'B': 1424, 'F': 412, 'Gs': 'asf'} print_key = False for key in sorted(dic): if key == 'F': print_key = True if print_key: print(key) Вывод: F Gs

Ответ 4



num_of_row = 2 for i, x in enumerate(dic): if i>=num_of_row: print(i,x)

Комментариев нет:

Отправить комментарий