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.
Advertisement
Answer
>>> 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]