33

LinkedHashMap is the Java implementation of a Hashtable like data structure (dict in Python) with predictable iteration order. That means that during a traversal over all keys, they are ordered by insertion. This is done by an additional linked list maintaining the insertion order.

Is there an equivalent to that in Python?

5 Answers 5

28

As of Python 3.7, dict objects maintain their insertion order by default.

If you're on Python 2.7 or Python >=3.1 you can use collections.OrderedDict in the standard library.

This answer to the question How do you retrieve items from a dictionary in the order that they’re inserted? contains an implementation of an ordered dict, in case you're not using Python 3.x and don't want to give yourself a dependency on the third-party ordereddict module.

Sign up to request clarification or add additional context in comments.

Comments

12

Although you can do the same thing by maintaining a list to keep track of insertion order, Python 2.7 and Python >=3.1 have an OrderedDict class in the collections module.

Before 2.7, you can subclass dict following this recipe.

1 Comment

The OrderedDict is coming in Python 3.1, but is not yet in 3.0, according to the documentation you linked.
3

I am not sure whether this is what you are asking for:

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

you can order the dic in the order of the insertion using ordereddict module.

d = ordereddict(dic, relax=True)

2 Comments

I don't think dict.iteritems provides an ordering based on the order of insertion...
Correct! You have to use ordereddict module for that.
2

In addition to the validated comment;

As of Python 3.7, dict preserves insertion order.

This answer shows this with details.

Comments

1

I don't think so; you'd have to use a dict plus a list. But you could pretty easily wrap that in a class, and define keys, __getitem__, __setitem__, etc. to make it work the way you want.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.