web-dev-qa-db-ja.com

値が辞書に存在するかどうかを調べる方法(python)

私は次のpython辞書を持っています。

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}

この辞書に "one"や "two"などの値が存在するかどうかを調べる方法が必要です。

たとえば、インデックス "1"が存在するかどうかを知りたい場合は、単に次のように入力する必要があります。

"1" in d

それから、pythonはそれが真か偽かを教えてくれますが、値が存在するかどうかを見つけること以外は同じことをする必要があります。

204
JimmyK
>>> 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]

EDIT:そして、あなたがその理由を疑問に思うのであれば...その理由は、上記のそれぞれが異なるタイプのオブジェクトを返すからです。ルックアップ操作に最適です。

>>> 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]
319
mac

あなたが使用することができます

"one" in d.itervalues()

"one"があなたの辞書の値の中にあるかどうかをテストします。

26
Sven Marnach

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以上のバージョンに関連するコンテンツ。 。

22
Shameem

辞書ビューを使う:

if x in d.viewvalues():
    dosomething()..
9
soulcheck

Python 3では辞書のvalues()関数を使うことができます。値のビューオブジェクトを返します。これは、イテレータオブジェクトを返すiter関数に渡すことができます。イテレータは、次のようにinを使ってチェックできます。

'one' in iter(d.values())

リストと似ているため、ビューオブジェクトを直接使用することもできます。

'one' in d.values()
1
Reed Richards

値を確認するためのさまざまなタイプが存在します

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
1
sim