More random python observations from a perl programmer

Patrick Bogaart bogw at
Fri Aug 20 05:20:00 EDT 1999

Jeff Blaine wrote:
> >GOTCHA: (low)
> >    You can't use "in" on dicts.  Instead, you must use
> >       d = { "fred":"wilma", "barney":"betty" }
> >       if d.has_key("fred"):   # legal
> >       if "fred" in d:         # ILLEGAL
> >    I don't understand why this was done.
> I'm very curious what would you think should be legal.
> Would 'in' (when used on a dict) search the keys, values, or both?
> Each one of those seem like a bad idea to me.  You have 2 separate
> areas containing data.  Searching each of those individually
> (has_key()...) seems right to me.

If you need to search *both* data areas,
why not do it the obvious way, then?:

	d = { "fred":"wilma", "barney":"betty" }
	if "fred"  in dict.keys():   # legal, and true
	if "wilma" in dict.values(): # also legal, also true

logic: dictionaries do have a "has_key()" methods, but no "has_value()"
drawback: keys() and values() create copies of the dict's list of keys,
so has_key() is much faster..

Patrick W. Bogaart
Department of Geomorphology and Quaternary Geology
Faculty  of Earth Sciences,  Vrije Universiteit Amsterdam
bogw at  

More information about the Python-list mailing list