Форум сайта python.su
Здравствуйте, недавно заметил довольно неприятную (для меня) особенность. Если вводить в словарь данные, а потом выводить, то порядок изменяется.
Как пример:
obj = {} for i in range(10): a,b = input().split() obj[a] = b for word in obj: print(obj[word])
Офлайн
VoilinПотому что словарь так устроен что не гарантирует никакого порядка ключей при итерировании.
но почему так происходит
Voilinиспользуйте list а не словарь, он гарантирует порядок.
и можно ли сделать выход данных в таком же порядке
Офлайн
Voilin
и можно ли сделать выход данных в таком же порядке, каком они стояли на входе?
>>> import collections >>> >>> d = collections.OrderedDict(zip('abcdefg', 'hijklmn')) >>> d OrderedDict([('a', 'h'), ('b', 'i'), ('c', 'j'), ('d', 'k'), ('e', 'l'), ('f', 'm'), ('g', 'n')]) >>>
VoilinПотому что словарь в питоне - это нагруженное множество (динамическая структура). А множество - неупорядоченная структура. Операция поиска во множестве приблизительно равна O(1). Поэтому, хоть оно и не упорядочено, но при миллиарде элементов взятие любого элемента будет одинаково быстрым.
но почему так происходит
Отредактировано py.user.next (Июль 18, 2016 03:00:26)
Офлайн