如何以隨機順序遍歷字典的所有項目?我的意思是random.shuffle,但是用於字典。如何在Python中以隨機順序遍歷字典?
11
A
回答
18
A dict
是一組無序的鍵值對。當你迭代一個dict
時,它是有效的隨機的。但要明確地隨機化鍵值對序列,您需要使用排序的不同對象,如列表。 dict.items()
,dict.keys()
和dict.values()
每個返回列表,可以混洗。
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]
或者,如果你不關心鍵:
values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
print value
您也可以在 「排序隨機」:
for key, value in sorted(d.items(), key=lambda x: random.random()):
print key, value
7
你不能。通過.keys()
獲取密鑰列表,對它們進行隨機掃描,然後在索引原始字典的同時遍歷列表。
或使用.items()
,然後洗牌並迭代。
+0
或'dict.values()'如果你想要的是價值觀。 –
0
正如Charles Brunet已經說過詞典是關鍵值對的隨機排列。但爲了讓它變得隨機,你將使用隨機模塊。 我已經編寫了一個函數,它將洗牌所有的密鑰,所以當你迭代它時,你將會隨機迭代。您可以通過查看代碼更清楚地瞭解:
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
現在,當你調用該函數只是傳遞參數(要洗牌字典的名稱),你會得到哪些洗牌鍵的列表。最後,您可以爲列表的長度創建一個循環,並使用name_of_dictionary[key]
來獲取該值。 希望這將值添加到這個堆棧:)
相關問題
- 1. 以相反順序遍歷字典(Python)
- 2. 如何在Java中以隨機順序遍歷zip文件中的條目?
- 3. Python遍歷字典
- 4. C#按任意順序遍歷字典
- 5. json到python字典covertion以隨機順序返回
- 6. 在Python中遞歸地遍歷字典?
- 7. Python遍歷按值排序的字典
- 8. 如何遍歷Python中的字典字典
- 9. 如何遍歷Python中的以下字典
- 10. 如何遍歷字典
- 11. python字典中返回值的隨機順序
- 12. 遍歷字典
- 13. 遍歷兩個字典Python中
- 14. 在python(圖遍歷)的字典
- 15. 在遍歷它時修改字典。 Python中的錯誤字典?
- 16. 遍歷隨機順序的所有元素一次
- 17. Python。以隨機順序顯示項目
- 18. 隨機遍歷數組(不隨機)
- 19. 如何隨機遍歷塊的圖像?
- 20. Pythonic字典遍歷
- 21. 以隨機順序打印字典內容
- 22. 如何在Python中遍歷字母表?
- 23. 遍歷字典中的
- 24. 刪除在遍歷字典
- 25. Python的隨機順序OrderedDict
- 26. 隨機遍歷有向圖
- 27. Psuedo隨機遍歷一組
- 28. 用foreach遍歷字典,按什麼順序完成?
- 29. 簡單的Python循環遍歷字典
- 30. Python:如何遍歷字典中的值並追加到值?
在Python3中,'d.items()','d.keys()'和'd.values()'產生一個迭代器對象。您需要使用'list()'函數將該迭代器顯式轉換爲列表。 –
「當你迭代一個'dict'時,它實際上是隨機的」 - 事實並非如此。考慮到像int這樣的事情很可能以排序的順序出現,依賴它甚至看起來是隨意的。另外,隨機密鑰的排序是O(nlog(n))而不是O(n),所以應該避免它。 – user2357112
你會如何適應這個總是隨機洗牌字典(以同樣的方式保持右鍵與正確值之間的鏈接,例如使用'np.random.RandomState(100)'? –