How to check if a value exists in a dictionary?

I have the following dictionary in python:

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

I need a way to find if a value such as "one" or "two" exists in this dictionary.

For example, if I wanted to know if the index "1" existed I would simply have to type:

"1" in d 

And then python would tell me if that is true or false, however I need to do that same exact thing except to find if a value exists.

7 Answers

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} >>> 'one' in d.values() True 

Out of curiosity, some comparative timing:

>>> 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: And in case you wonder why... the reason is that each of the above returns a different type of object, which may or may not be well suited for lookup operations:

>>> type(d.viewvalues()) <type 'dict_values'> >>> type(d.values()) <type 'list'> >>> type(d.itervalues()) <type 'dictionary-valueiterator'> 

EDIT2: As per request in comments...

>>> 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] 
3

In Python 3, you can use

"one" in d.values() 

to test if "one" is among the values of your dictionary.

In Python 2, it's more efficient to use

"one" in d.itervalues() 

instead.

Note that this triggers a linear scan through the values of the dictionary, short-circuiting as soon as it is found, so this is a lot less efficient than checking whether a key is present.

2

Python dictionary has get(key) function

>>> d.get(key) 

For Example,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} >>> d.get('3') 'three' >>> d.get('10') None 

If your key does not exist, then it will return None value.

foo = d[key] # raise error if key doesn't exist foo = d.get(key) # return None if key doesn't exist 

Content relevant to versions less than 3.0 and greater than 5.0.

1

Use dictionary views:

if x in d.viewvalues(): dosomething().. 
0

Different types to check the values exists

d = {"key1":"value1", "key2":"value2"} "value10" in d.values() >> False 

What if list of values

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6']} "value4" in [x for v in test.values() for x in v] >>True 

What if list of values with string values

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

You can use this:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} print("one" in d.values) 

Or you can use any function:

print(any([True for i,j in d1.items() if j == "one"])) 

In Python 3 you can use the values() function of the dictionary. It returns a view object of the values. This, in turn, can be passed to the iter function which returns an iterator object. The iterator can be checked using in, like this,

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

Or you can use the view object directly since it is similar to a list

'one' in d.values() 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like