Работа со словарями python2.7
У меня есть массив чисел:
0x0000: 023d 0017 068e 98a7 b047 6520 8100 a100
0x0010: 425c 564c 414e 3040 b1d2 b1d2 0138 0000
0x0020: 004a 0000 0000 0132 0001 fd84 8fa6 012b
0x0030: 012b 0000 0000 0000 ffff 0000 0000 0118
0x0040: 0049 0104 0000 0000 0001 e3d5 ba3f 0000
0x0050: 0001 0000 0000 be9a 9fbe 0000 0000 0000
0x0060: 0000 0000 0000 0000 0000 0000 0000 0000
0x0070: 0000 0000 0000 0000 0000 0000 0000 0000
0x0080: 0000 0000 0000 0000 0000 0000 0000 0000
0x0090: 0000 0000 0000 0000 0000 0000 0000 0000
0x00a0: 0000 0000 0000 0000 0098 0000 0100 0000
0x00b0: 0100 0000 0001 0000 0001 4523 d70a 3e80
0x00c0: 0000 0000 0000 3e4c cccd 0000 0000 0000
0x00d0: 412f 0000 1800 0002 0000 0000 7ef4 000f
0x00e0: 4240 0400 0000 0000 0000 0000 0001 010c
0x00f0: 0602 0001 ffff 0000 0000 7001 0000 0000
0x0100: 0000 0000 0000 0000 0000 0000 0000 0000
0x0110: 0001 0000 7fff 0000 0000 0000 0000 0000
0x0120: 0000 0000 0001 00be 0000 0000 0000 0100
0x0130: 0300 0100 0c00 0100 0000 0000 0000 0000
0x0140: 0000 0392 0002 0100 0000 0000 0000
Я считываю его с помощью subline.strip() и формирую словарь, однако когда я пытаюсь получить ключи словаря методом .keys() выходит это:
['0x00e0', '0x00d0', '0x0130', '0x0140', '0x00c0', '0x0020', '0x0100', '0x00f0', '0x0010', '0x0000', '0x0120', '0x0050', '0x0040', '0x0110', '0x0090', '0x0080', '0x0030', '0x00b0', '0x0070', '0x0060', '0x00a0'].
Почему ключи выводятся не по порядку, причем при каждом перезапуске кода этот неправильный порядок сохраняется?
Ответы (1 шт):
А кто обещал, что в словаре будет соблюдён порядок ключей? Это в Python 3.6+ есть.
Цитата
Порядок ключей Данные в обычном словаре упорядочены по очередности добавления ключей, начиная с 3.6 (в 2.7 — не упорядочены, но последовательность детерминирована, воспроизводима; в 3.5 — не упорядочены, последовательность не детерминирована, не воспроизводима между запусками).
Если требуется хранить порядок, в котором в словарь были добавлены элементы (например для обхода этих элементов), следует использовать collections.OrderedDict().