On Mon, Feb 4, 2013 at 7:04 PM, Dave Angel <da...@davea.name> wrote: >> Nope, in both Python 2 and 3 iterating over a dict directly just >> provides the key. That's also how "if key in dict" works.
A dict implements __contains__ for an efficient "in" test. In general, the interpreter falls back to using iteration if a type lacks __contains__. In 2.x iter(some_dict) returns a dictionary-keyiterator (weird hyphen). In 3.x it's a dict_keyiterator (normal underscore). > Was it just that items(), keys() and values() methods return a view > (iterator) instead of a list, and the iter*() versions are gone? In 3.x, keys() and items() return views that are iterable (__iter__) and that implement the sequence methods __len__ and __contains__ as well as a few set operations that return a set: intersection (&), union (|), difference (-), and symmetric difference (^). Using the set methods for items() requires the values to also be hashable. The view returned by values() doesn't bother implementing __contains__ and the set operations, but it does have __iter__ and __len__. 2.7 provides these views via viewkeys(), viewitems(), and viewvalues(). The corresponding iterators returned by iter() in 3.x are dict_keyiterator, dict_itemiterator, and dict_valueiterator. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor