キーとしてタプルを使用するdictがあり、現在辞書にあるタプルキーの2番目の要素など、使用可能な最大値を取得したいと考えています。たとえば、次のようになります。
my_dict = {('a', 1):value_1, ('b', 1):value_2, ('a', 2):value_3, ('c', 3):value_4, ('b', 2):value_5}
したがって、キーの2番目の要素の最大値は3です。
この値を導き出すための最速の方法は何ですか?
キーとしてタプルを使用するdictがあり、現在辞書にあるタプルキーの2番目の要素など、使用可能な最大値を取得したいと考えています。たとえば、次のようになります。
my_dict = {('a', 1):value_1, ('b', 1):value_2, ('a', 2):value_3, ('c', 3):value_4, ('b', 2):value_5}
したがって、キーの2番目の要素の最大値は3です。
この値を導き出すための最速の方法は何ですか?
また:
largest_key = max(my_dict, key=lambda x: x[1])
または:
from operator import itemgetter
largest_key = max(my_dict, key=itemgetter(1))
DSMによると、直接反復処理は、またはdict
を取得して反復処理するよりも高速です。keys()
viewkeys()
Zverina氏が話しているのは、データ構造dict
をtuple
キー付きから次のようなものに変換することだと思います。
my_dict = {
'a': {
1: value_1,
2: value_3
}
'b': {
1: value_2,
2: value_5
}
'c': {
3: value_4
}
}
そうすれば、ですべての値の最大値を見つけたい場合はa
、次のようにすることができます。
largest_key = max(d['a'])
追加費用なしで。(データはすでにサブセットに分割されているため、検索を行うたびにサブセットを構築するために計算を無駄にする必要はありません)。
編集
検索を特定のサブセットに制限するには、次のようにします。
>>> subset = 'a'
>>> largest_key_within_subset = max((i for i in my_dict if i[0] == subset), key=itemgetter(1))
(i for i in my_dict if i[0] == subset)
指定されたサブセットにあるキーのみを返すジェネレーターはどこにありますか。
最大の値、つまり3を探している場合は、次を使用してください。
print max(my_dict.keys(), key = lambda x: x[1])[1]
dictから最大の値を探している場合は、次を使用します。
my_dict = {('a', 1):'value_1', ('b', 1):'value_2', ('a', 2):'value_3', ('c', 3):'value_4', ('b', 2):'value_5'}
largest = max(my_dict.keys(), key = lambda x: x[1])
print my_dict[largest]
セット内の要素間の関係に関する追加情報がない場合(この場合は辞書のキーなど)、各要素をチェックする必要があります=>複雑さO(n)
(線形)-唯一の改善点は、次のような組み込み関数を使用することです。max
最大値を取得(またはポップ)する必要がある場合は、別の構造(などheap
)について考えてください。