Comment puis-je obtenir une paire aléatoire d'un dict
? Je crée un jeu dans lequel vous devez deviner la capitale d'un pays et j'ai besoin de questions qui apparaissent au hasard.
Le dict
ressemble à{'VENEZUELA':'CARACAS'}
Comment puis-je faire ceci?
python
random
dictionary
key
tekknolagi
la source
la source
d.keys()
est une liste, mais cela ne fonctionnera pas dans Python 3.x oùd.keys()
est un itérateur. Tu devrais faire à larandom.choice(list(d.keys()))
place.d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Hehe, +1 pour le lavage de cerveau très subtil ...J'ai écrit ceci en essayant de résoudre le même problème:
https://github.com/robtandy/randomdict
Il a un accès aléatoire O (1) aux clés, valeurs et éléments.
la source
Essaye ça:
Cela fonctionne vraiment.
la source
Si vous ne souhaitez pas utiliser le
random
module, vous pouvez également essayer popitem () :Étant donné que l'
dict
ordre ne préserve pas , en utilisant,popitem
vous obtenez des éléments dans un ordre arbitraire (mais pas strictement aléatoire).Gardez également à l'esprit que
popitem
supprime la paire clé-valeur du dictionnaire, comme indiqué dans la documentation .la source
next
cela ne fonctionne pas avec un dictionnaire car il s'agit d'une cartographie. (Je suis venu ici pour l'inspiration et c'était tout).En appelant random.choice sur le
keys
du dictionnaire (les pays).la source
random.choice(list(d.keys()))
.Cela fonctionne dans Python 2 et Python 3:
Une clé aléatoire:
Une valeur aléatoire
Une clé et une valeur aléatoires
la source
Si vous ne voulez pas utiliser random.choice (), vous pouvez essayer de cette façon:
la source
list(…)
ici plusieurs fois. Et pourquoi pasmyDictionary_list = list(myDictionary)
?Puisque le message original voulait la paire :
(style python 3)
la source
Puisque ce sont des devoirs:
Vérifiez
random.sample()
qui sélectionnera et renverra un élément aléatoire dans une liste. Vous pouvez obtenir une liste de clés de dictionnaire avecdict.keys()
et une liste de valeurs de dictionnaire avecdict.values()
.la source
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ée à partir d'un itérateur.random.sample
renvoiek
des éléments aléatoires ,random.choice
renvoie un seul élément aléatoireJe suppose que vous faites une sorte d'application de quiz. Pour ce type d'application, j'ai écrit une fonction qui est la suivante:
Si je vais donner l'entrée
questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
et appeler la fonctionshuffle(questions)
, la sortie sera la suivante:Vous pouvez étendre cela davantage en mélangeant les options également
la source
selected_keys
. Et vous répéterez probablement cela environ 100 fois. Au moins, supprimez les touches prises de q commedel(q[current_selection])
- vous pouvez écraser q avec le nouveau mélangéselected_keys
commeq = selected_keys
après tout. N'oubliez pas non plus de vous identifier! Vous pouvez également regarder monnp.random.choice(...)
approche: stackoverflow.com/a/62843377/4575793Essayez ceci (en utilisant random.choice from items)
la source
Avec les versions modernes de Python (depuis 3), les objets retournés par les méthodes
dict.keys()
,dict.values()
etdict.items()
sont des objets de vue *. Et bon peut être itéré, donc utiliser directementrandom.choice
n'est pas possible car maintenant ils ne sont pas une liste ou un ensemble.Une option consiste à utiliser la compréhension de liste pour faire le travail avec
random.choice
:Références:
la source
la source
J'ai trouvé ce post en cherchant une solution assez comparable. Pour sélectionner plusieurs éléments d'un dict, cela peut être utilisé:
la source