Comment faire pour obtenir une valeur aléatoire à partir du dictionnaire en python
Comment puis-je obtenir aléatoires de paire à partir d'un dict
? Je suis en train de faire un jeu où vous devez deviner une capitale d'un pays et j'ai besoin de questions à apparaître de façon aléatoire.
La dict
ressemble {'VENEZUELA':'CARACAS'}
Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Un sens (en Python 2.*) serait:
MODIFIER: La question a été changé quelques années après le post original, et demande maintenant d'une paire, plutôt que d'un seul élément. La dernière ligne doit être:
d.keys()
est une liste, mais il ne fonctionne pas en Python 3.x oùd.keys()
est un itérateur. Vous devriez fairerandom.choice(list(d.keys()))
à la place.d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Hehe, +1 pour la très subtile de lavage de cerveau ...random.choice([d.keys()])
. Les supports de convertir l'itérateur à une liste tout de même que l'appel à lalist()
, mais peut-être un peu plus propre pour certains.d.keys()
partie). Est efficace?original
question à ne pas poser pour une paire - une seule valeur. La question a été édité 2 ans plus tard par une autre personne & modification de poser pour une paire. Depuis que la question a été changé, je vais modifier cette réponse afin de refléter le changement. Merci pour remarquer.random.choice
prend séquence en tant que paramètre (voir la section Types de Séquence) et du dictionnaire n'est pas une séquence - vous ne pouvez pas se référer à l'un de ses éléments par l'index.J'ai écrit cela en essayant de résoudre le même problème:
https://github.com/robtandy/randomdict
Il a O(1) l'accès aléatoire à clés, les valeurs et les éléments.
Si vous ne souhaitez pas utiliser le
random
module, vous pouvez également essayer popitem():Depuis le
dict
ne pas préserver l'ordre, en utilisantpopitem
vous obtenir des objets dans un arbitraire (mais pas strictement aléatoire) afin de elle.Également garder à l'esprit que
popitem
supprime la paire clé-valeur à partir du dictionnaire, comme indiqué dans le docs.next
ne fonctionne pas avec un dictionnaire comme il est un mappage. (Je suis venu ici pour trouver de l'inspiration et de ce qu'il était).Essayez ceci:
Cela fonctionne bien.
En appelant aléatoire.choix sur le
keys
du dictionnaire (le pays).random.choice(list(d.keys()))
.Si vous ne souhaitez pas utiliser aléatoire.choix (), vous pouvez essayer de cette façon:
Depuis le post original voulais le paire:
(python 3 style)
Puisque c'est les devoirs:
Découvrez
aléatoire.exemple()
qui permet de sélectionner et de retour d'un élément au hasard dans une liste. Vous pouvez obtenir une liste de clés de dictionnaire avecdict.keys()
et une liste de dictionnaire des valeurs avecdict.values()
.random.sample
etrandom.choice
ne peut pas travailler avec des itérateurs. Ils ont besoin de connaître la longueur de la séquence, qui ne peut pas être déterminé à partir d'un itérateur.random.sample
retournek
aléatoire éléments,random.choice
renvoie un seul élément aléatoireCela fonctionne en Python 2 et Python 3:
Une clé aléatoire:
Une valeur aléatoire
Une clé aléatoire et la valeur
Je suis en supposant que vous êtes de faire un quiz type d'application. Pour ce type d'application, j'ai écrit une fonction qui est comme suit:
Si je vais donner à l'entrée de
questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
et appeler la fonctionshuffle(questions)
Alors la sortie sera comme suit:Vous pouvez l'étendre de plus en rassemblant les options aussi
Essayez ceci (à l'aide de random.choix d'articles)