Подтвердить что ты не робот

Итерация через словарь Python с помощью клавиш в отсортированном порядке

У меня есть словарь в Python, который выглядит следующим образом:

D = {1:'a', 5:'b', 2:'a', 7:'a'}

Значения ключей в основном не имеют значения. Есть ли способ перебирать словарь по ключам в числовом порядке? Ключи являются целыми числами.

Вместо того чтобы сказать

for key in D:
    # some code...

Можно ли пройти по словарным ключам в порядке 1, 2, 5, 7?

Кроме того, я не могу использовать функции сортировки/сортировки.

4b9b3361

Ответ 1

Вы можете использовать это:

for key in sorted(D.iterkeys()):
    .. code ..

В Python 3.x используйте D.keys() (что совпадает с D.iterkeys() в Python 2.x).

Ответ 2

Принимая во внимание ваше положение о том, что вы не хотите сортировать, и предполагая, что ключи являются целыми числами, вы можете просто найти максимальные и минимальные значения ключей, затем перебрать этот диапазон и проверить, действительно ли каждый из них словарь.

for key in xrange(min(D), max(D) + 1):
    if key in D:
        print D[key]

Это не очень эффективно, конечно, но он будет работать, и он избегает сортировки.

Ответ 3

Предполагая, что ключи/значения вставляются по порядку, вы можете использовать OrderedDict:

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 'a'
>>> d[2] = 'a'
>>> d[5] = 'b'
>>> d[7] = 'a'
>>> d
OrderedDict([(1, 'a'), (2, 'a'), (5, 'b'), (7, 'a')])
>>> d.keys()
[1, 2, 5, 7]

Ответ 4

Вы можете получить список ключей с помощью dict.keys(), а затем перебрать отсортированный вид списка:

for key in sorted(D.keys()):
    print key, D[key]