2009-03-17 2 views
13

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

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

ответ

9

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

This answer на вопрос How do you retrieve items from a dictionary in the order that they’re inserted? содержит реализацию упорядоченного Словаре, в случае, если вы не используете Python 3.x и не хотите, чтобы дать себе зависимость от третьей стороны ordereddict module.

10

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

До 2.7, вы можете подкласса dictfollowing this recipe.

+0

OrderedDict поставляется в Python 3.1, но еще не в 3.0, в соответствии с документацией, которую вы связали. – kquinn

+0

Да, вы правы, я забыл об этом. Ред. – sykora

1

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

2

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

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

вы можете заказать DIC в порядке вставки с помощью ordereddict модуля.

d = ordereddict(dic, relax=True) 
+0

Я не думаю, что '' dict.iteritems'' предоставляет заказ на основе порядка вставки ... – sykora

+0

Правильно! Для этого вам нужно использовать модуль orderdict. – aatifh