Comment puis-je obtenir une paire aléatoire d'un dict
? Je fais un jeu où vous devez deviner la capitale d'un pays et j'ai besoin de questions pour apparaître au hasard.
La dict
ressemble à {'VENEZUELA':'CARACAS'}
Comment puis-je faire ceci?
Une façon (en Python 2. *) serait:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.keys()))
EDIT: La question a été modifiée quelques années après le message d'origine et demande désormais une paire plutôt qu'un seul élément. La dernière ligne devrait maintenant être:
country, capital = random.choice(list(d.items()))
J'ai écrit ceci en essayant de résoudre le même problème:
https://github.com/robtandy/randomdict
Il dispose de O(1) accès aléatoire aux clés, aux valeurs et aux éléments.
Si vous ne souhaitez pas utiliser le module random
, vous pouvez également essayer popitem () :
>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)
Puisque la dict
ne conserve pas l'ordre , 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 le docs .
popitem () est utile pour parcourir de manière destructive un dictionnaire
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
En appelant random.choice sur la keys
du dictionnaire (les pays).
Essaye ça:
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
Cela fonctionne vraiment.
Depuis le message original voulait le paire:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))
(style python 3)
Si vous ne voulez pas utiliser random.choice (), vous pouvez essayer ceci:
>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'
Cela fonctionne dans Python 2 et Python 3:
Une clé aléatoire:
random.choice(list(d.keys()))
Une valeur aléatoire
random.choice(list(d.values()))
Une clé et une valeur aléatoires
random.choice(list(d.items()))
Je suppose que vous faites une application de type quiz. Pour ce type d'application, j'ai écrit une fonction qui est la suivante:
def shuffle(q):
"""
The input of the function will
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
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
print(current_selection+'? '+str(q[current_selection]))
Si je vais donner l’entrée de questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
et appeler la fonction shuffle(questions)
, alors le résultat sera le suivant:
VENEZUELA? CARACAS CANADA? TORONTO
Vous pouvez étendre cela encore plus en mélangeant les options aussi
Puisque c'est un devoir:
Départ random.sample()
qui sélectionnera et retournera un élément aléatoire de la liste. Vous pouvez obtenir une liste de clés de dictionnaire avec dict.keys()
et une liste de valeurs de dictionnaire avec dict.values()
.
Essayez ceci (en utilisant random.choice à partir d’articles)
import random
a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
# ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
# 'num'
b = { 'video':0, 'music':23,"picture":12 }
random.choice(Tuple(b.items())) ('music', 23)
random.choice(Tuple(b.items())) ('music', 23)
random.choice(Tuple(b.items())) ('picture', 12)
random.choice(Tuple(b.items())) ('video', 0)