Jak mogę iterować po wszystkich pozycjach słownika w kolejności losowej? Mam na myśli coś random.shuffle, ale dla słownika.Jak iterować przez Dict w kolejności losowej w Pythonie?
Odpowiedz
A dict
to nieuporządkowany zestaw par klucz-wartość. Podczas iteracji dict
, jest to efektywnie losowe. Aby jednak jawnie wybrać losowo sekwencję par klucz-wartość, należy pracować z innym obiektem, który jest zamawiany, na przykład z listą. dict.items()
, dict.keys()
i dict.values()
każda lista zwrotów, które można tasować.
items=d.items() # List of tuples
random.shuffle(items)
for key, value in items:
print key, value
keys=d.keys() # List of keys
random.shuffle(keys)
for key in keys:
print key, d[key]
Lub, jeśli nie dbają o kluczy:
values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
print value
Można również "sort przez random":
for key, value in sorted(d.items(), key=lambda x: random.random()):
print key, value
Nie możesz. Uzyskaj listę kluczy z numerem .keys()
, przetasuj je, a następnie przejrzyj listę podczas indeksowania oryginalnego dokumentu.
Lub użyj .items()
, a następnie przetasuj i powtórz to.
lub 'dict.values ()' jeśli chcesz to wartości. –
Jak Charles Brunet już, że w słowniku jest losowym układem par wartości klucza. Ale aby było naprawdę losowo, użyjesz losowego modułu. Napisałem funkcję, która przetasuje wszystkie klawisze, a więc podczas iteracji przez nią będzie się powtarzać losowo. Można zrozumieć jaśniej widząc kod:
def shuffle(q):
"""
This function is for shuffling
the dictionary elements.
"""
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
return selected_keys
Teraz po wywołaniu funkcji prostu przekazać parametr (nazwę słownika, który chcesz Shuffle), a otrzymasz listę kluczy, które są tasuje. Na koniec możesz utworzyć pętlę dla długości listy i użyć wartości name_of_dictionary[key]
. nadzieję, że będzie dodać wartość do tego stosu :)
- 1. szyn: każdy w kolejności losowej
- 2. Blokowanie dict w Pythonie?
- 3. Wywołanie metod w kolejności losowej (C#)
- 4. Nie można wznowić działalność w kolejności losowej
- 5. Algorytm generowania losowej kolejności elementów
- 6. Unia obiektów Dict w Pythonie
- 7. Jak iterować w odwrotnej kolejności na mapie w C++
- 8. Jak mogę uruchomić testy JUnit w losowej kolejności?
- 9. Jak iterować przez fd_set
- 10. Efektywność i klucz w dict w Pythonie
- 11. Jak iterować przez zakres dat w Javie?
- 12. Jak iterować przez kolekcję Java w JavaScript
- 13. Jak iterować przez XML w PowerShell?
- 14. Jak iterować przez wszystkie podektory w wektorze?
- 15. Wyświetlanie kolejności wierszy w kolejności losowej w przewijaniu listy w Androidzie
- 16. Ruby - Wykonywanie testów w losowej kolejności z prowizją
- 17. Jak iterować przez google multimap
- 18. Czy mogę przeprowadzić test NUnit w losowej kolejności?
- 19. Ustawianie zdefiniowanej losowej kolejności dla tablicy w PHP
- 20. Internet Explorer wyświetla atrybuty XML w losowej kolejności
- 21. Jak iterować na liście powtarzającej każdy element w Pythonie
- 22. jak iterować przez słownik w słowniku w szablonie django?
- 23. Jak iterować przez plik zip w pamięci w Ruby
- 24. W bashu, jak mogę mieć zestaw argumentów w dowolnej kolejności losowej? Podobnie jak para klucz-wartość?
- 25. przekonwertować dict do sortowanych dict w python
- 26. Odwracanie kolejności argumentów funkcji w Pythonie
- 27. Sortowanie listy z niestandardowej kolejności w Pythonie
- 28. Jak iterować w MultiKeyMap?
- 29. testu jeśli DICT zawarte w dict
- 30. Jak iterować przez mieszanie JSON z coffeescript
W języku Python3, 'd.items()', 'd.keys()' i 'd.values ()' tworzą obiekt iteratora. Musisz jawnie przekonwertować ten iterator na listę używając funkcji 'list()'. –
"Podczas iteracji" dyktatu ", jest on faktycznie losowy" - nie jest. Poleganie na tym, aby wyglądać na przypadkowo byłoby złym pomysłem, biorąc pod uwagę, że rzeczy takie jak int są dość prawdopodobne, że wyjdą w uporządkowanej kolejności. Ponadto sortowanie losowe to O (nlog (n)) zamiast O (n), więc prawdopodobnie powinno się go unikać. – user2357112
Jak to zaadaptować, aby zawsze przetasować słownik (zachowując połączenia między prawym kluczem do odpowiedniej wartości w ten sam sposób, na przykład używając 'np.random.RandomState (100)'? –