Làm cách nào tôi có thể lặp qua tất cả các mục của từ điển theo thứ tự ngẫu nhiên? Tôi có nghĩa là một cái gì đó random.shuffle, nhưng đối với một từ điển.Làm thế nào để lặp qua dict theo thứ tự ngẫu nhiên trong Python?
Trả lời
A dict
là tập hợp các cặp khóa-giá trị không theo thứ tự. Khi bạn lặp lại một dict
, nó có hiệu quả ngẫu nhiên. Nhưng để phân biệt ngẫu nhiên chuỗi các cặp khóa-giá trị, bạn cần phải làm việc với một đối tượng khác được sắp xếp, như một danh sách. dict.items()
, dict.keys()
và dict.values()
mỗi danh sách trả lại, có thể được xáo trộn.
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]
Hoặc, nếu bạn không quan tâm đến các phím:
values=d.values() # List of values
random.shuffle(values) # Shuffles in-place
for value in values:
print value
Bạn cũng có thể "sắp xếp theo ngẫu nhiên":
for key, value in sorted(d.items(), key=lambda x: random.random()):
print key, value
Bạn không thể. Lấy danh sách các phím với .keys()
, trộn chúng, sau đó lặp qua danh sách trong khi lập chỉ mục dict gốc.
Hoặc sử dụng .items()
và trộn và lặp lại điều đó.
Hoặc 'dict.values () 'nếu tất cả các bạn muốn là các giá trị. –
Như Charles Brunet đã nói rằng từ điển là sự sắp xếp ngẫu nhiên của các cặp giá trị khóa. Nhưng để làm cho nó thực sự ngẫu nhiên, bạn sẽ được sử dụng mô-đun ngẫu nhiên. Tôi đã viết một hàm sẽ xáo trộn tất cả các phím và vì vậy trong khi bạn đang lặp qua nó, bạn sẽ lặp lại ngẫu nhiên. Bạn có thể hiểu rõ hơn bằng cách nhìn thấy mã:
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
Bây giờ khi bạn gọi hàm chỉ cần vượt qua các tham số (tên của từ điển bạn muốn để shuffle) và bạn sẽ nhận được một danh sách các phím được xáo trộn. Cuối cùng, bạn có thể tạo vòng lặp cho độ dài của danh sách và sử dụng name_of_dictionary[key]
để nhận giá trị. Hy vọng điều này sẽ thêm một giá trị để ngăn xếp này :)
- 1. Rails: mỗi theo thứ tự ngẫu nhiên
- 2. lặp ngẫu nhiên trong Python
- 3. Làm thế nào để lặp qua một từ điển Python theo thứ tự được xác định?
- 4. Lặp lại ngẫu nhiên trong vòng lặp
- 5. Phương thức gọi theo thứ tự ngẫu nhiên (C#)
- 6. Trả lại các hàng theo thứ tự ngẫu nhiên
- 7. Tuyên bố foreach có lặp lại theo thứ tự hoặc có thể là thứ tự ngẫu nhiên không?
- 8. os.walk lặp lại theo thứ tự nào?
- 9. Làm cách nào để lặp qua Multimap theo thứ tự chèn?
- 10. php thứ tự ngẫu nhiên từ một foreach
- 11. Làm thế nào để lặp qua một thuộc tính của một lớp, theo thứ tự chúng đã được xác định?
- 12. Làm cách nào để tạo số ngẫu nhiên bằng Python?
- 13. Làm thế nào để 'ngẫu nhiên()' số ngẫu nhiên trong C (Linux)?
- 14. Giản đồ XSD cho phép thứ tự ngẫu nhiên
- 15. Làm thế nào là ngẫu nhiên Random.Next()?
- 16. Cách lấy giá trị ngẫu nhiên trong từ điển python
- 17. Thứ tự Div ngẫu nhiên khi tải trang
- 18. Ruby - Thực hiện kiểm tra theo thứ tự ngẫu nhiên với rake
- 19. Internet Explorer hiển thị thuộc tính XML theo thứ tự ngẫu nhiên
- 20. Số ngẫu nhiên không lặp đi lặp lại trong numpy
- 21. Làm thế nào để sắp xếp một dict Python theo giá trị
- 22. làm thế nào để đọc một tập tin csv theo thứ tự ngược trong python
- 23. Làm thế nào ngẫu nhiên là urandom?
- 24. Không thể tiếp tục hoạt động theo thứ tự ngẫu nhiên
- 25. Trình tự ngẫu nhiên của Python với hạt giống
- 26. Làm thế nào để lặp qua mảng theo lô?
- 27. Cách đọc/dev/ngẫu nhiên trong python
- 28. CSS ngẫu nhiên qua JS
- 29. Interleaving nhiều iterables ngẫu nhiên trong khi vẫn giữ trật tự của chúng trong python
- 30. Làm thế nào để ngẫu nhiên các phần tử enum?
Trong Python3, 'd.items()', 'd.keys()', và 'd.values ()' tạo một đối tượng trình lặp. Bạn cần chuyển đổi rõ ràng trình vòng lặp đó thành danh sách bằng cách sử dụng hàm 'list()'. –
"Khi bạn lặp lại một' dict', nó có hiệu quả ngẫu nhiên "- nó không phải. Dựa vào nó để thậm chí nhìn ngẫu nhiên sẽ là một ý tưởng tồi, xem xét rằng những thứ như ints là khá có khả năng đi ra trong thứ tự sắp xếp. Ngoài ra, việc sắp xếp ngẫu nhiên-key là O (nlog (n)) thay vì O (n), vì vậy nó có lẽ nên tránh. – user2357112
Làm thế nào bạn có thể điều chỉnh điều này để luôn trộn lẫn từ điển (duy trì liên kết giữa khóa bên phải với đúng giá trị theo cùng một cách ví dụ như sử dụng 'np.random.RandomState (100)'? –