2012-04-12 18 views
9

Tôi có một cuốn từ điển như thế này:làm thế nào để lựa chọn một cách ngẫu nhiên nhiều khóa và giá trị của nó trong một con trăn điển

user_dict = { 
      user1: [(video1, 10),(video2,20),(video3,1)] 
      user2: [(video1, 4),(video2,8),(video6,45)] 
      ... 
      user100: [(video1, 46),(video2,34),(video6,4)]     
      } 

(video1,10) means (videoid, number of request) 

Bây giờ tôi muốn chọn một cách ngẫu nhiên 10 người và làm một số tính toán như

1. calculate number of videoid for each user. 
2. sum up the number of requests for these 10 random users, etc 

sau đó tôi cần tăng số ngẫu nhiên lên 20, 30, 40 tương ứng

Nhưng "random.choice" chỉ có thể chọn một giá trị tại một thời điểm, đúng không? làm cách nào để chọn nhiều khóa và danh sách sau mỗi khóa?

Trả lời

17

Đó là những gì random.sample() dành cho:

Return a k length list of unique elements chosen from the population sequence. Used for random sampling without replacement.

Điều này có thể được sử dụng để lựa chọn các phím. Sau đó, các giá trị có thể được truy lục bằng tra cứu từ điển thông thường:

>>> d = dict.fromkeys(range(100)) 
>>> keys = random.sample(list(d), 10) 
>>> keys 
[52, 3, 10, 92, 86, 42, 99, 73, 56, 23] 
>>> values = [d[k] for k in keys] 

Hoặc, bạn có thể lấy mẫu trực tiếp từ d.items().

+0

Nếu bạn muốn lấy các khóa và giá trị, bạn chỉ có thể sử dụng '' random.sample() '' trên '' dict.items() '', thay vì nhận khóa sau đó thực hiện tra cứu. –

+1

bạn cần danh sách (d) hoặc bạn sẽ nhận được lỗi này tăng TypeError ("Dân số phải là một chuỗi hoặc tập hợp. Đối với dicts, sử dụng danh sách (d).") TypeError: Dân số phải là một chuỗi hoặc thiết lập. Đối với dicts, sử dụng danh sách (d). –

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