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] 3In 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.
2Python 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.
1Use dictionary views:
if x in d.viewvalues(): dosomething().. 0Different 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 1You 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