Найти - Пользователи
Полная версия: Недопонимание в работе словаря
Начало » Центр помощи » Недопонимание в работе словаря
1
Voilin
Здравствуйте, недавно заметил довольно неприятную (для меня) особенность. Если вводить в словарь данные, а потом выводить, то порядок изменяется.
Как пример:

 obj = {}
for i in range(10):
	a,b = input().split()
	obj[a] = b
for word in obj:
	print(obj[word])

Ввожу в obj

a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
i 9
j 10

А выходит

2
8
10
4
5
1
3
7
9
6

Я понимаю, что это может быть абсолютно нормально для python, но почему так происходит и можно ли сделать выход данных в таком же порядке, каком они стояли на входе? Искал в нете, но, возможно, плохо искал и ничего не нашёл.
doza_and
Voilin
но почему так происходит
Потому что словарь так устроен что не гарантирует никакого порядка ключей при итерировании.
Voilin
и можно ли сделать выход данных в таком же порядке
используйте list а не словарь, он гарантирует порядок.
py.user.next
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). Поэтому, хоть оно и не упорядочено, но при миллиарде элементов взятие любого элемента будет одинаково быстрым.

(Ещё есть динамические структуры: стек, очередь, дек, множество, последовательность, Л1-список, Л2-список, динамический вектор.)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB