如何在字典python中随机选择多个键及其值

时间:2012-04-12 14:23:51

标签: python

我有这样的字典:

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 个答案:

答案 0 :(得分:24)

这就是random.sample()的用途:

  

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

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

>>> 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()进行抽样。

答案 1 :(得分:1)

简单

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

答案 2 :(得分: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 )

答案 3 :(得分:0)

如果你想返回一个字典,你可以像这样在 Sven Marnach's answer 中使用字典理解而不是列表理解:

d = dict.fromkeys(range(100))
keys = random.sample(d.keys(), 10)
sample_d = {k: d[k] for k in keys}