We're back after a server migration that caused effbot.org to fall over a bit harder than expected. Expect some glitches.

How can I get a dictionary to display its keys in a consistent order?

You can’t. Dictionaries store their keys in an unpredictable order, so the display order of a dictionary’s elements will be similarly unpredictable.

This can be frustrating if you want to save a printable version to a file, make some changes and then compare it with some other printed dictionary. In this case, you can use the pprint module to pretty-print the dictionary; the items will be presented in order sorted by the key.

A more complicated solution is to subclass dict and create a class that prints itself in a predictable order. Here’s one simple-minded implementation of such a class:

class sorted_dict(dict):
    def __repr__(self):
        result = ["%r: %r" % (key, self[key]) for key in sorted(self)]
        return "{" + ", ".join(result) + "}"
    __str__ = __repr__

This will work for many common situations you might encounter, though it’s far from a perfect solution. The largest flaw is that if some values in the dictionary are also dictionaries, their values won’t be presented in any particular order.

CATEGORY: programming