回答:
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> 'one' in d.values()
True
好奇心から、いくつかの比較タイミング:
>>> T(lambda : 'one' in d.itervalues()).repeat()
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965]
>>> T(lambda : 'one' in d.values()).repeat()
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875]
>>> T(lambda : 'one' in d.viewvalues()).repeat()
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287]
編集:そしてなぜあなたが不思議に思った場合...理由は、上記のそれぞれが異なるタイプのオブジェクトを返すためです。これは、ルックアップ操作に適している場合とそうでない場合があります:
>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>
EDIT2:コメントの要求に従って...
>>> T(lambda : 'four' in d.itervalues()).repeat()
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955]
>>> T(lambda : 'four' in d.values()).repeat()
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707]
>>> T(lambda : 'four' in d.viewvalues()).repeat()
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906]
d
、タイミングは実質的に無意味です。Python 3では、dict.values()
デフォルトでディクショナリビューでありdict.itervalues()
、現在dict.viewvalues()
は存在しません。これを(より大きな辞書で)再テストし、を使用list(d.values())
してPython 2の動作iter(d.values())
を取得し、dict.itervalues()
動作を取得することもできますが、これらのバージョンは両方ともグローバルなルックアップと呼び出しが必要であるため、絶対的に遅くなります。どちらも不要な余分な作業を行います。
使用できます
"one" in d.itervalues()
"one"
辞書の値の中にあるかどうかをテストします。
Python辞書にはget(key)関数があります
>>> d.get(key)
例えば、
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> d.get('3')
'three'
>>> d.get('10')
none
キーが存在しない場合は、none
値を返します。
foo = d[key] # raise error if key doesn't exist
foo = d.get(key) # return none if key doesn't exist
3.0未満および5.0を超えるバージョンに関連するコンテンツ。。
key:value
キーではなく、値を尋ねました。
値をチェックするためのさまざまなタイプが存在します
d = {"key1":"value1", "key2":"value2"}
"value10" in d.values()
>> False
値の一覧の場合
test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6']}
"value4" in [x for v in test.values() for x in v]
>>True
文字列値を持つ値のリストの場合
test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6'], 'key5':'value10'}
values = test.values()
"value10" in [x for v in test.values() for x in v] or 'value10' in values
>>True
value in [... list comprehension over sequence ...]
、を使用しないでくださいany(value in sequence ...)
。
Python 3ではvalues()
、辞書の機能を使用できます。値のビューオブジェクトを返します。次に、これをiter
イテレータオブジェクトを返す関数に渡すことができます。イテレータはin
、次のようにを使用して確認できます。
'one' in iter(d.values())
または、ビューオブジェクトはリストに似ているため、直接使用できます。
'one' in d.values()
iter()
。in
オブジェクトはすでにイテラブルとして使用されます(型は専用__contains__
メソッドを実装していません)。との唯一の違いは'one' in iter(d.values())
、'one in d.values()
Pythonに追加の処理を行わせることです(のグローバルルックアップのコストを支払いますiter
)。