How to iterate through dict in random order in Pyt

2019-01-19 10:56发布

How can I iterate through all items of a dictionary in a random order? I mean something random.shuffle, but for a dictionary.

标签: python random
3条回答
混吃等死
2楼-- · 2019-01-19 11:30

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
查看更多
Evening l夕情丶
3楼-- · 2019-01-19 11:30

As Charles Brunet have already said that the dictionary is random arrangement of key value pairs. But to make it really random you will be using random module. I have written a function which will shuffle all the keys and so while you are iterating through it you will be iterating randomly. You can understand more clearly by seeing the code:

def shuffle(q):
    """
    This function is for shuffling 
    the dictionary elements.
    """
    selected_keys = []
    i = 0
    while i < len(q):
        current_selection = random.choice(q.keys())
        if current_selection not in selected_keys:
            selected_keys.append(current_selection)
            i = i+1
    return selected_keys

Now when you call the function just pass the parameter(the name of the dictionary you want to shuffle) and you will get a list of keys which are shuffled. Finally you can create a loop for the length of the list and use name_of_dictionary[key] to get the value. Hope this will add a value to this stack :)

Source: Radius Of Circle

查看更多
等我变得足够好
4楼-- · 2019-01-19 11:47

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.

查看更多
登录 后发表回答