26

我有一本这样的字典:

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)

现在我想随机选择 10 个用户并进行一些计算,例如

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

那么我需要将随机数分别增加到20、30、40

但是“random.choice”一次只能选择一个值,对吧?如何选择多个键和每个键后面的列表?

4

4 回答 4

44

这就是random.sample()

返回从总体序列中选择的唯一元素的 ak 长度列表。用于无放回的随机抽样。

这可用于选择键。随后可以通过正常的字典查找来检索这些值:

>>> 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]

或者,您可以直接从d.items().

于 2012-04-12T14:25:13.837 回答
1

如果您想返回字典,则可以使用字典推导而不是Sven Marnach 回答中的列表推导,如下所示:

d = dict.fromkeys(range(100))
keys = random.sample(d.keys(), 10)
sample_d = {k: d[k] for k in keys}
于 2021-03-30T20:45:05.930 回答
0

我有这个问题的工作,

import random

def random_a_dict_and_sample_it( a_dictionary , a_number ): 
    _ = {}
    for k1 in random.sample( list( a_dictionary.keys() ) , a_number ):
        _[ k1 ] = a_dictionary[ k1 ]
    return _

在你的情况下:

user_dict = random_a_dict_and_sample_it( user_dict , 2 )
于 2020-12-12T12:58:55.587 回答
0

简单地

import random
mydict = {"a":"its a", "b":"its b"}
random.sample(mydict.items(), 1)

# [('b', 'its b')]
# or
# [('a', 'its a')]

于 2019-09-20T12:14:00.903 回答