2011-10-16 32 views

Trả lời

18

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()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 
+8

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()'. –

+0

"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

+0

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)'? –

7

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 đó.

+0

Hoặc 'dict.values ​​() 'nếu tất cả các bạn muốn là các giá trị. –

0

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 :)

Source: Radius Of Circle

Các vấn đề liên quan