web-dev-qa-db-ja.com

python辞書でランダムな値を取得する方法

dictからランダムなペアを取得するにはどうすればよいですか?国の首都を推測する必要があるゲームを作っています。ランダムに表示される質問が必要です。

dict{'VENEZUELA':'CARACAS'}のように見えます

これどうやってするの?

123
tekknolagi

1つの方法(Python 2. *の場合)は次のとおりです。

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.keys()))

EDIT:質問は元の投稿の数年後に変更され、単一のアイテムではなくペアを要求するようになりました。最終行は次のようになります。

country, capital = random.choice(list(d.items()))
214
Gerrat

私は同じ問題を解決しようとしてこれを書いた:

https://github.com/robtandy/randomdict

キー、値、アイテムへのO(1)ランダムアクセスがあります。

25
Rob T

randomモジュールを使用したくない場合は、 popitem() を試すこともできます。

>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)

dict順序を保持しない なので、popitemを使用することにより、任意の順序(厳密にはランダムではない)でアイテムを取得できます。

docs で述べられているように、popitemは辞書からキーと値のペアを削除することにも留意してください。

popitem()は辞書を破壊的に反復するのに便利です

15
patriciasz
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'

辞書(国)のkeysrandom.choice を呼び出すことにより。

9
user225312

これを試して:

import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]

これは間違いなく機能します。

8
lavee_singh

Random.choice()を使用したくない場合は、次の方法を試すことができます。

>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'

元の投稿ではpairが必要だったため:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))

(python 3スタイル)

3
OBu

これはPython 2およびPython 3で機能します:

ランダムキー:

random.choice(list(d.keys()))

ランダムな値

random.choice(list(d.values()))

ランダムなキーと値

random.choice(list(d.items()))
3
firelynx

私はあなたがクイズのようなアプリケーションを作っていると仮定しています。この種のアプリケーションのために、次のような関数を作成しました。

def shuffle(q):
"""
The input of the function will 
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
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
        print(current_selection+'? '+str(q[current_selection]))

questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}の入力を指定して関数shuffle(questions)を呼び出すと、出力は次のようになります。

ベネズエラ? CARACAS 
カナダ?トロント

オプションをシャッフルすることで、これをさらに拡張できます

3
Anivarth

これは宿題だから:

random.sample() をチェックして、リストからランダムな要素を選択して返します。 dict.keys()を使用して辞書キーのリストを取得し、dict.values()を使用して辞書値のリストを取得できます。

3
carl

これを試してください(アイテムのrandom.choiceを使用)

import random

a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
#  ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
#  'num'
1
Herman Yanush
b = { 'video':0, 'music':23,"picture":12 } 
random.choice(Tuple(b.items())) ('music', 23) 
random.choice(Tuple(b.items())) ('music', 23) 
random.choice(Tuple(b.items())) ('picture', 12) 
random.choice(Tuple(b.items())) ('video', 0) 
0
ziya efkar