回答:
1つの方法は次のとおりです。
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
編集:質問は元の投稿から数年後に変更され、単一のアイテムではなくペアを求めるようになりました。最終行は次のようになります。
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Hehe、非常に微妙な洗脳のための+1 ...
これを試して:
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
これは間違いなく動作します。
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()は、辞書を破壊的に反復するのに役立ちます
next
は、マッピングであるためにディクショナリで機能しないという事実を回避するための良い方法です。(私はインスピレーションを得るためにここに来ました、そしてこれはそれでした)。
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'
辞書(国)のrandom.choiceを呼び出しkeys
ます。
random.choice(list(d.keys()))
。
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'
list(…)
ここで複数回生成します。いかがmyDictionary_list = list(myDictionary)
ですか?
これは宿題なので:
random.sample()
リストからランダムな要素を選択して返すものを確認してください。で辞書キーdict.keys()
のリストを、で辞書値のリストを取得できますdict.values()
。
random.sample
そして、random.choice
イテレータで動作することはできません。彼らはシーケンスの長さを知る必要がありますが、これはイテレータからは決定できません。
random.sample
戻りk
ランダム要素、random.choice
単一のランダムな要素を返します
あなたはクイズのようなアプリケーションをしていると思います。この種のアプリケーションでは、次のような関数を記述しました。
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)
、出力は次のようになります。
ベネズエラ?カラカス カナダ?トロント
オプションをシャッフルすることでこれをさらに拡張できます
selected_keys
。そして、あなたはおそらくそれを約100回繰り返すでしょう。少なくともqの取得したキーを次のように削除しますdel(q[current_selection])
- すべての後のselected_keys
ようq = selected_keys
に新しいシャッフルでqを上書きできます。また、識別を忘れないでください!あるいは、私のnp.random.choice(...)
アプローチを見てください:stackoverflow.com/a/62843377/4575793
これを試してください(アイテムの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'
最新バージョンのPython(3以降)では、メソッドdict.keys()
、dict.values()
およびによって返されるdict.items()
オブジェクトはビューオブジェクトです*。また、繰り返し処理random.choice
が可能なため、リストやセットではないため、直接使用することはできません。
1つのオプションは、リスト内包表記を使用して次のことを行うことですrandom.choice
。
import random
colors = {
'purple': '#7A4198',
'turquoise':'#9ACBC9',
'orange': '#EF5C35',
'blue': '#19457D',
'green': '#5AF9B5',
'red': ' #E04160',
'yellow': '#F9F985'
}
color=random.choice([hex_color for color_value in colors.values()]
print(f'The new color is: {color}')
参照:
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)
私はかなり似た解決策を探してこの投稿を見つけました。辞書から複数の要素を選択するには、これを使用できます。
idx_picks = np.random.choice(len(d), num_of_picks, replace=False) #(Don't pick the same element twice)
result = dict ()
c_keys = [d.keys()] #not so efficient - unfortunately .keys() returns a non-indexable object because dicts are unordered
for i in idx_picks:
result[c_keys[i]] = d[i]
d.keys()
リストがであるPython 2.xでは機能しd.keys()
ますが、イテレータであるPython 3.xでは機能しません。random.choice(list(d.keys()))
代わりに行う必要があります。