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」は一度に1つの値しか選択できませんよね?複数のキーと各キーに続くリストを選択する方法は?

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

辞書を返したい場合は、次のようにSvenMarnachの回答のリスト内包表記の代わりに辞書内包表記を使用できます。

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
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 に答える
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 に答える