Как перебрать dict в случайном порядке в Python?

Как я могу перебрать все элементы словаря в случайном порядке? Я имею в виду что-то random.shuffle, но для словаря.

python,random,

15

Ответов: 3


21 принят

A dict- неупорядоченный набор пар ключ-значение. Когда вы выполняете итерацию dict, она фактически случайна. Но чтобы явно рандомизировать последовательность пар ключ-значение, вам нужно работать с другим упорядоченным объектом, например списком. dict.items(), dict.keys()И dict.values()каждый возвратные списки, которые могут быть перемешаны.

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]

Или, если вам не нужны ключи:

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

Вы также можете «отсортировать по случайности»:

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

7

Ты не можешь Получить список ключей с помощью .keys(), перемешать их, затем выполнить итерацию по списку при индексации оригинального dict.

Или используйте .items(), перемешайте и повторяйте это.


Как уже говорил Шарль Брюне , в словаре случайное расположение пар ключ-значение. Но чтобы сделать его действительно случайным, вы будете использовать случайный модуль. Я написал функцию, которая будет перетасовывать все ключи, поэтому во время итерации по ней вы будете выполнять итерацию случайным образом. Вы можете понять более ясно, увидев код:

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

Теперь, когда вы вызываете функцию, просто передайте параметр (имя словаря, который вы хотите перемешать), и вы получите список клавиш, которые перемешиваются. Наконец, вы можете создать цикл для длины списка и использовать name_of_dictionary[key]для получения значения. Надеюсь, что это добавит ценность этому стеку :)

Источник: Радиус Круга

Python, случайный,
Похожие вопросы