2009-03-17 8 views
13

LinkedHashMap est l'implémentation Java d'une structure de données de type Hashtable (dict en Python) avec un ordre d'itération prévisible. Cela signifie que lors d'une traversée sur toutes les clés, elles sont classées par insertion. Ceci est fait par une liste chaînée supplémentaire maintenant l'ordre d'insertion.Equivalent pour LinkedHashMap en Python

Existe-t-il un équivalent en Python?

Répondre

10

Bien que vous puissiez faire la même chose en conservant une liste pour suivre l'ordre d'insertion, Python 2.7 et Python >=3.1 ont une classe OrderedDict dans le module de collections.

Avant 2.7, vous pouvez sous-classer dictfollowing this recipe.

+0

Le OrderedDict vient en Python 3.1, mais n'est pas encore en 3.0, selon la documentation que vous avez liée. – kquinn

+0

Oui, vous avez raison, j'avais oublié cela. Édité. – sykora

1

Je ne pense pas; vous devriez utiliser un dict plus une liste. Mais vous pouvez facilement l'intégrer dans une classe et définir keys, __getitem__, __setitem__, etc. pour que cela fonctionne comme vous le souhaitez.

2

Je ne suis pas sûr que ce soit ce que vous demandez:

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

vous pouvez commander la dic dans l'ordre de l'insertion en utilisant le module ordereddict.

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

Je ne pense pas que '' dict.iteritems'' fournit un ordre basé sur l'ordre d'insertion ... – sykora

+0

Correct! Vous devez utiliser le module ordereddict pour cela. – aatifh