Эквивалент для LinkedHashMap в Python - PullRequest
17 голосов
/ 17 марта 2009

LinkedHashMap - это Java-реализация структуры данных, подобной Hashtable (dict в Python) с предсказуемым порядком итераций. Это означает, что во время обхода всех ключей они упорядочиваются путем вставки. Это делается с помощью дополнительного связанного списка, поддерживающего порядок вставки.

Есть ли эквивалент в Python?

Ответы [ 4 ]

14 голосов
/ 17 марта 2009

Если вы используете Python 2.7 или Python> = 3.1, вы можете использовать collection.OrderedDict в стандартной библиотеке.

Этот ответ на вопрос Как вы извлекаете элементы из словаря в порядке их вставки? содержит реализацию упорядоченного слова, если вы не использует Python 3.x и не хочет зависеть от стороннего orderdict модуля .

11 голосов
/ 17 марта 2009

Хотя вы можете сделать то же самое, поддерживая список для отслеживания порядка вставки, Python 2.7 и Python> = 3.1 имеют класс OrderedDict в модуле коллекций. 1005 *

До версии 2.7 вы можете создать подкласс dict , следуя этому рецепту .

2 голосов
/ 17 марта 2009

Я не уверен, что это то, что вы просите:

>>> dic = {1: 'one', 2: 'two'}
>>> for k, v in dic.iteritems():
...     print k, v

вы можете заказать dic в порядке вставки, используя orderdict module.

d = ordereddict(dic, relax=True)
1 голос
/ 17 марта 2009

Я так не думаю; Вы должны будете использовать dict плюс список. Но вы можете довольно легко обернуть это в классе и определить keys, __getitem__, __setitem__ и т. Д., Чтобы он работал так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...