2017-07-10 14 views
2

私はdictionaryを持っています:キーは文字列です、値は浮動小数点です。ランダム最大キーの場合は、辞書の場合

例:

A = {'a':1, 'b':2, 'c':2, 'd':0} 

私は同じ確率で答えとして'b'または'c'を取得したいのですが。私は言った行動を得る方法を見つけた。しかし、私はこれがベストプラクティスであるとは確信していません。

import random 

A = {'a':1, 'b':2, 'c':2, 'd':0} 
all = (A.items()) 
values = [(x[1],random.random(),x[0]) for x in all] 
maxIndex = values.index(max(values)) 
print(values[maxIndex][2]) 

より良い(またはより優雅な)アプローチはありますか?

+0

'random.choice(d.keys())'が回答しました[ここ](https://stackoverflow.com/questions/4859292/how-to-get-a-random-value-in-python-dictionary) – Lex

+1

@Lexこれは同じもののようには見えません。それは、まず最大値を見つけて、その値にマップするランダムなキーを選択するようなものです。 – mwchase

+0

@ジェダイ「A」はこの形式です。私はこの場合n = 4としてO(n)について心配していません。私は一般的にはより速いアプローチを見て嬉しいです。 –

答えて

5

はこれを試してみてください:

import random 
A = {'a':1, 'b':2, 'c':2, 'd':0} 

mv = max(A.values()) 
random.choice([k for (k, v) in A.items() if v == mv]) 
=> 'b' # or 'c' 

まず、我々は最大値を検索し、我々は、ランダムにその値に一致するキーのいずれかを選択します。私たちはrandom.choiceを使用しています。これは、均一な分布を持つランダムな選択を保証しています。

関連する問題