> That's because dictionaries are not stored sequentially and the > order of retrieval is not guaranteed - it can even change > during the execution of a program so you should never > depend on it. That's because dictionaries are optimised > for random access via the keys not to be iterated over.
Moreover, most implementations *deliberately* randomize their iteration order to avoid a particular kind of hash collision attack out there in the wild. See: https://en.wikipedia.org/wiki/Collision_attack https://arstechnica.com/business/2011/12/huge-portions-of-web-vulnerable-to-hashing-denial-of-service-attack/ https://mail.python.org/pipermail/python-dev/2011-December/115116.html for some details. > I've a vague memory that recent versions of Python may have > a special dictionary type that does return items in the order > they were inserted, but I may be mixing that up with > another language... Hopefully someone else can provide > a steer there. In Python, it's collections.OrderedDict: https://docs.python.org/3.6/library/collections.html#collections.OrderedDict Other languages have similar libraries. Java has LinkedHashMap, for example: https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html Best of wishes! _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor