Python >> Tutoriel Python >  >> Python

Comment itérer sur un dictionnaire Python dans un ordre aléatoire ?

Résumé : Pour parcourir les éléments du dictionnaire dans un ordre aléatoire, obtenez la liste des éléments dans un tuple avec .items() ou obtenir la liste des clés avec .keys() ou extraire les valeurs d'une liste en utilisant .values() , puis mélangez et parcourez cette liste en utilisant le shuffle() méthode du module aléatoire.

Problème : Étant donné un dictionnaire; comment itérer sur tous les éléments dans un ordre aléatoire ?

Exemple :

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}
# <Some Method/Procedure to iterate and display over the dictionary items in random order>

Sortie :

Roll 2 : John
Roll 1 : Tyson
Roll 5 : Christopher
Roll 3 : Rock
Roll 4 : Brock

Dans l'exemple ci-dessus, nous voyons que les éléments du dictionnaire ont été affichés dans un ordre aléatoire. C'est le but de notre discussion dans cet article.

Introduction

Un dictionnaire en Python est généralement un ensemble non ordonné de paires clé-valeur. Cela signifie que les éléments d'un dictionnaire n'ont pas d'ordre défini, c'est-à-dire que vous ne pouvez pas faire référence à un élément en utilisant un index. De plus, un dictionnaire Python ne suit pas l'ordre d'insertion, et l'itération sur celui-ci produira les valeurs dans l'ordre en fonction de la façon dont les clés sont stockées dans sa table de hachage, qui est à son tour influencée par une valeur aléatoire pour réduire les collisions.

Informations : Un dictionnaire Python utilise une structure de données appelée hashmap. La clé d'un dictionnaire est convertie à l'aide d'un algorithme de hachage d'une chaîne (ou autre) en une valeur entière, et cela implique quelques calculs très simples pour utiliser cette valeur entière et rechercher le bon endroit dans le dictionnaire pour regarder .

Lorsque vous parcourez un dictionnaire, il est effectivement aléatoire. Mais comme mentionné précédemment, il produira des valeurs dans l'ordre en fonction de la façon dont les clés sont stockées dans la table de hachage. Par conséquent, si vous souhaitez randomiser explicitement la séquence de paires clé-valeur dans le dictionnaire, vous devez travailler avec un objet différent qui est ordonné. Par conséquent, sans plus tarder, examinons les différentes manières qui nous permettent de randomiser les paires clé-valeur dans un dictionnaire.

❖ Convertir le dictionnaire en liste et utiliser le random.shuffle() Méthode

Pour randomiser et parcourir les paires clé-valeur du dictionnaire, vous devrez le convertir en une liste, puis utiliser le shuffle() méthode pour parcourir les éléments dans un ordre aléatoire.

Remarque : shuffle est une méthode intégrée du module random en Python qui accepte une séquence (comme une liste) puis réorganise l'ordre des éléments dans la séquence.

Ici, vous avez trois options :

  • mélangez les éléments .
  • mélangez les touches .
  • mélangez les valeurs .

Plongeons-nous dans chaque méthode une par une.

Méthode 1 :mélanger à l'aide de dict.items()

La première approche utilise la méthode du dictionnaire dict.items() pour récupérer un itérable de (key, value) tuples puis convertissez-le en une liste en utilisant le list() intégré constructeur. Utilisez ensuite le shuffle() méthode du random module sur la liste des tuples contenant (key, value) paires pour parcourir les éléments dans un ordre aléatoire.

Examinons le programme suivant pour comprendre le concept derrière l'explication donnée.

import random

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}

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

Sortie :

Roll 2 : John
Roll 1 : Tyson
Roll 4 : Brock
Roll 3 : Rock
Roll 5 : Christopher

Utilisation du items() La méthode sur l'objet dictionnaire est la méthode la plus Pythonique si tout ce que vous voulez est de récupérer une liste de (key, value) paires. Mais que se passe-t-il si vous souhaitez randomiser les éléments à l'aide des touches ? Cela nous amène à la méthode suivante.

Méthode 2 :mélanger à l'aide de dict.key()

Pour obtenir une liste de valeurs clés, utilisez le dict.keys() et passez l'itérable résultant dans un list() constructeur. Utilisez ensuite le shuffle() méthode du random module sur la liste des keys du dictionnaire, pour parcourir les éléments dans un ordre aléatoire.

import random

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}

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

Sortie :

Roll 1 : Tyson
Roll 4 : Brock
Roll 3 : Rock
Roll 2 : John
Roll 5 : Christopher

Méthode 3 :mélanger à l'aide de dict.value()

Au lieu de clés, vous pouvez parcourir les valeurs dans un ordre aléatoire et ignorer les clés. Pour obtenir une liste de valeurs, utilisez le dict.values() et passez l'itérable résultant dans un list() constructeur. Utilisez ensuite le shuffle() méthode du random module sur la liste des values du dictionnaire, pour parcourir les éléments dans un ordre aléatoire.

import random

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}

values = list(d.values())
random.shuffle(values)
for value in values:
    print(value)

Sortie :

Christopher
John
Rock
Brock
Tyson

Méthode 4 :Utilisation d'une compréhension de liste

La compréhension de liste est une manière compacte de créer des listes. La formule simple est [expression + context] .

  • Expression : Que faire de chaque élément de la liste ?
  • Contexte : Quels éléments sélectionner ? Le contexte consiste en un nombre arbitraire de for et if déclarations.

Vous pouvez utiliser la compréhension de liste pour modifier chaque (key, value) paire du dictionnaire d'origine avant de stocker le résultat dans la nouvelle liste, puis d'utiliser le shuffle() méthode du random module sur la liste pour parcourir les éléments dans un ordre aléatoire.

import random

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}

r = ([(k, v) for k, v in d.items()])
random.shuffle(r)
for key, value in r:
    print(key, ":", value)

Sortie :

Roll 3 : Rock
Roll 1 : Tyson
Roll 2 : John
Roll 5 : Christopher
Roll 4 : Brock

❖ Convertir le dictionnaire en liste et utiliser le random.sample() Méthode

sample() est une méthode intégrée du module random en Python qui renvoie une liste avec une sélection aléatoire d'un nombre spécifié d'éléments dans une séquence donnée. Vous pouvez utiliser cette méthode pour parcourir les éléments du dictionnaire en convertissant les éléments en une liste à l'aide du items() méthode puis en la passant comme premier paramètre au random.sample() méthode et len(d) comme deuxième paramètre qui spécifie le nombre d'éléments dans le dictionnaire.

import random

d = {
    'Roll 1': 'Tyson',
    'Roll 2': 'John',
    'Roll 3': 'Rock',
    'Roll 4': 'Brock',
    'Roll 5': 'Christopher'
}

for item, value in random.sample(list(d.items()), len(d)):
    print(item, ":", value)

Sortie :

Roll 5 : Christopher
Roll 3 : Rock
Roll 4 : Brock
Roll 2 : John
Roll 1 : Tyson

Conclusion

Avec cela, nous arrivons à la fin de cet article et j'espère qu'il vous aidera à parcourir facilement les éléments d'un dictionnaire dans un ordre aléatoire. Veuillez rester à l'écoute et abonnez-vous pour des solutions et des articles plus intéressants !


Post précédent