How to iterate through dict in random order in Python?

You can't. Get the list of keys with .keys(), shuffle them, then iterate through the list while indexing the original dict.

Or use .items(), and shuffle and iterate that.


A dict is an unordered set of key-value pairs. When you iterate a dict, it is effectively random. But to explicitly randomize the sequence of key-value pairs, you need to work with a different object that is ordered, like a list. dict.items(), dict.keys(), and dict.values() each return lists, which can be shuffled.

items=d.items() # List of tuples
random.shuffle(items)
for key, value in items:
    print key, value

keys=d.keys() # List of keys
random.shuffle(keys)
for key in keys:
    print key, d[key]

Or, if you don't care about the keys:

values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
    print value

You can also "sort by random":

for key, value in sorted(d.items(), key=lambda x: random.random()):
    print key, value

Tags:

Python

Random