Jak mogę uzyskać losową parę z dict
? Tworzę grę, w której musisz odgadnąć stolicę kraju, a pytania powinny pojawiać się losowo.
Że dict
wygląda jak{'VENEZUELA':'CARACAS'}
W jaki sposób mogę to zrobić?
python
random
dictionary
key
tekknolagi
źródło
źródło
d.keys()
jest listą, ale nie zadziała w Pythonie 3.x, gdzied.keys()
jest iteratorem. Zamiast tego powinieneś to zrobićrandom.choice(list(d.keys()))
.d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
hehe, +1 za bardzo subtelne pranie mózgu ...Napisałem to próbując rozwiązać ten sam problem:
https://github.com/robtandy/randomdict
Ma O (1) losowy dostęp do kluczy, wartości i przedmiotów.
źródło
Spróbuj tego:
To zdecydowanie działa.
źródło
Jeśli nie chcesz używać
random
modułu, możesz również spróbować popitem () :Ponieważ
dict
nie zachowuje porządku , używając gopopitem
otrzymujesz z niego przedmioty w dowolnej (ale nie ściśle losowej) kolejności.Pamiętaj też, że
popitem
powoduje to usunięcie pary klucz-wartość ze słownika, zgodnie z opisem w dokumentacji .źródło
next
nie działa ze słownikiem, ponieważ jest to mapowanie. (Przyszedłem tu po inspirację i to było to).Wywołując random.choice na
keys
słownika (państwa).źródło
random.choice(list(d.keys()))
.Działa to w Pythonie 2 i Pythonie 3:
Losowy klucz:
Wartość losowa
Losowy klucz i wartość
źródło
Jeśli nie chcesz używać random.choice (), możesz spróbować w ten sposób:
źródło
list(…)
tutaj wiele razy. A co powieszmyDictionary_list = list(myDictionary)
?Ponieważ oryginalny post chciał pary :
(w stylu pythona 3)
źródło
Ponieważ to jest praca domowa:
Sprawdź,
random.sample()
co wybierze i zwróci losowy element z listy. Możesz uzyskać listę kluczy słownika za pomocądict.keys()
i listę wartości słownika za pomocądict.values()
.źródło
random.sample
irandom.choice
nie może pracować z iteratorami. Muszą znać długość sekwencji, której nie można określić na podstawie iteratora.random.sample
zwraca elementyk
losowe , zwraca pojedynczy element losowyrandom.choice
Zakładam, że tworzysz aplikację typu quiz. Dla tego rodzaju aplikacji napisałem funkcję, która wygląda następująco:
Jeśli podam dane wejściowe
questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
i wywołam funkcję,shuffle(questions)
to wynik będzie następujący:Możesz to jeszcze bardziej rozszerzyć, tasując również opcje
źródło
selected_keys
. Prawdopodobnie powtórzysz to około 100 razy. Przynajmniej usuń zabrane klawisze q jakdel(q[current_selection])
- możesz nadpisać q nowym przetasowanym,selected_keys
tak jakq = selected_keys
po wszystkim. Nie zapomnij też o identyfikacji! Alternatywnie spójrz na mojenp.random.choice(...)
podejście: stackoverflow.com/a/62843377/4575793Spróbuj tego (używając random.choice z pozycji)
źródło
Z nowoczesnych wersjach Pythona (od 3), obiektów zwróconych przez metod
dict.keys()
,dict.values()
adict.items()
to widok obiektów *. I hej można iterować, więc bezpośrednie użycierandom.choice
nie jest możliwe, ponieważ teraz nie są one listą ani zestawem.Jedną z opcji jest użycie listy ze zrozumieniem, aby wykonać zadanie z
random.choice
:Bibliografia:
źródło
źródło
Znalazłem ten post szukając raczej porównywalnego rozwiązania. Aby wybrać wiele elementów z dyktu, można tego użyć:
źródło