Does the python code
for key in dict:
...
, where dict is a dict data type, always iterate in a fixed order with regrard to key? For example, suppose dict={"aaa":1,"bbb",2}, will the above code always first let key="aaa" and then key="bbb" (or in another fixed order)? Is it possible that the order is random? I am using python 3.3 in ubuntu 13 and let's assume this running environment doesn't change. Thank you.
add one thing: during multiple runs, the variable dict remains unchanged, i.e., generate once and read multiple times.
-
1Orders of dict keys is random, stackoverflow.com/questions/5629023/…alexvassel– alexvassel2013年10月10日 06:21:32 +00:00Commented Oct 10, 2013 at 6:21
-
2you can try OrderedDictuser1593705– user15937052013年10月10日 06:23:59 +00:00Commented Oct 10, 2013 at 6:23
-
1@alexvassel: The order is unordered, but not random (for it is given by the implementation of the dict).Matthias– Matthias2013年10月10日 06:45:39 +00:00Commented Oct 10, 2013 at 6:45
2 Answers 2
Intrinsically, a dictionary has no order in which it stores it keys. So you can not rely on the order. (I wouldn't assume the order to be unchanged even when the environment is identical).
One of the few reliable ways:
for key in sorted(yourDictionary.keys()):
# Use as key and yourDictionary[key]
EDIT: Response to your comment: Python does not store keys in a random fashion. All the documentation says is that, you should not rely on this order. It depends on the implementation how the keys are ordered. What I will say here about your question is: If you are relying on this order, you are probably doing something wrong. In general you should/need not rely on this at all. :-)
5 Comments
CPython implementation detail: Keys and values are listed in an arbitrary
order which is non-random, varies across Python implementations, and
depends on the dictionary’s history of insertions and deletions.
For more info:http://docs.python.org/2/library/stdtypes.html#dict.items
What's more, You could use collections.OrderedDict to make the order fixed.