Ответ 1
Вы можете использовать это:
for key in sorted(D.iterkeys()):
.. code ..
В Python 3.x используйте D.keys()
(что совпадает с D.iterkeys()
в Python 2.x).
У меня есть словарь в Python, который выглядит следующим образом:
D = {1:'a', 5:'b', 2:'a', 7:'a'}
Значения ключей в основном не имеют значения. Есть ли способ перебирать словарь по ключам в числовом порядке? Ключи являются целыми числами.
Вместо того чтобы сказать
for key in D:
# some code...
Можно ли пройти по словарным ключам в порядке 1, 2, 5, 7
?
Кроме того, я не могу использовать функции сортировки/сортировки.
Вы можете использовать это:
for key in sorted(D.iterkeys()):
.. code ..
В Python 3.x используйте D.keys()
(что совпадает с D.iterkeys()
в Python 2.x).
Принимая во внимание ваше положение о том, что вы не хотите сортировать, и предполагая, что ключи являются целыми числами, вы можете просто найти максимальные и минимальные значения ключей, затем перебрать этот диапазон и проверить, действительно ли каждый из них словарь.
for key in xrange(min(D), max(D) + 1):
if key in D:
print D[key]
Это не очень эффективно, конечно, но он будет работать, и он избегает сортировки.
Предполагая, что ключи/значения вставляются по порядку, вы можете использовать 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]
Вы можете получить список ключей с помощью dict.keys()
, а затем перебрать отсортированный вид списка:
for key in sorted(D.keys()):
print key, D[key]