why in returns values for array and keys for dictionary

Erik Max Francis max at alcyone.com
Tue Aug 26 08:49:21 CEST 2008

Marc 'BlackJack' Rintsch wrote:

> On Mon, 25 Aug 2008 19:57:06 -0700, alex23 wrote:
>> On Aug 26, 10:49 am, "++imanshu" <himanshu.g... at gmail.com> wrote:
>>>     Wouldn't it be nicer to have 'in' return values (or keys) for
>>>     both
>>> arrays and dictionaries. Arrays and Dictionaries looked so similar in
>>> Python until I learned this difference.
>> […]
>> In both cases, 'in' returns a boolean indicating the existence of an
>> item in the list, or a key in the dict. I'm not sure why you'd need it
>> to return the item you're checking for the existence of, as you'd have
>> to have that item before you could do the check.
>> Have I missed what you're asking for here? Could you provide a
>> pseudocode example to demonstrate what you mean?
> The OP isn't talking about the ``in`` operator but ``in`` as part of 
> ``for … in …``.  So it's actually the question why ``list(a_dict)`` 
> doesn't return a list of values but a list of keys.

That is basically the same question.  Iterating over a list gives you 
its elements, and using the `in` operator with lists tells you whether 
or not an object is an element of the list.  Iterating over a dictionary 
gives you its _keys_, not its values, and the `in` operator with 
dictionaries tells you whether or not a _key_ is in the dictionary.

 >>> l = [1, 2, 3]
 >>> for x in l: print x
 >>> 0 in l
 >>> 1 in l
 >>> d = {'a': 1, 'b': 2, 'c': 3}
 >>> for x in d: print x
 >>> 'a' in d
 >>> 1 in d

The reason why people find it more useful to deal with keys rather than 
values of a dictionary during iteration or containment testing is ... 
because that tends to be what you're usually more interested in, and is 
more efficient.  For another thing, if you're doing a lot of testing for 
containment in values, then it's likely you're not using the right data 
structure, or combination of data structures.  That's not what 
dictionaries are for.

Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
  San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
   Well I have been puppetized / Oh how I have compromised
    -- Lamya

More information about the Python-list mailing list