Will McGugan wrote: > If I have two dictionaries containing identical values, can I be sure > that the items() method will return tuples in the same order? > > I tried an experiment with CPython and it does appear to be the case. > > >>> a=dict(a=1, b=1, c=2) > >>> b=dict(c=2, a=1, b=1) > >>> a > {'a': 1, 'c': 2, 'b': 1} > >>> b > {'a': 1, 'c': 2, 'b': 1} > >>> a.items() > [('a', 1), ('c', 2), ('b', 1)] > >>> b.items() > [('a', 1), ('c', 2), ('b', 1)] > > Can I rely on this behavior?
Probably not. Dictionaries do not have an ordering that you should count on. In practice, the order in which you get the items if you iterate over a dictionary is dependent on the hashing function, which can potentially change over time. This is a case where most implementations _probably_ will return identical dictionaries in the same order when iterated over (of course, different implementations will have different orderings, but you don't care about that), but I wouldn't take the chance and rely on such an implementation detail. If you want to keep track of the order in which objects were added to a dictionary, you'll need to keep a separate list of (sorted) keys, which is easy enough. If you're lazy there are plenty of recipes around for things like `SortedDictionary` or `sorteddict`. -- Erik Max Francis && [EMAIL PROTECTED] && http://www.alcyone.com/max/ San Jose, CA, USA && 37 20 N 121 53 W && AIM, Y!M erikmaxfrancis The public cannot be too curious concerning the characters of public men. -- Samuel Adams -- http://mail.python.org/mailman/listinfo/python-list