In Python 3.3:
Iterate over keys: "for k in d.keys()" ...over values: "for v in d.values()" ...over both: "for k, v in d.items()"
Iterate over keys: "for k in d.keys()" ...over values: "for v in d.values()" ...over both: "for k, v in d.items()"
The original plan was to simply let .keys(), .values() and
.items() return an iterator, i.e. exactly what iterkeys(),
itervalues() and iteritems() return in Python 2.x.
However, the Java Collections Framework [1] suggests that
a better solution is possible: the methods return objects
with set behavior (for .keys() and .items()) or multiset
(== bag) behavior (for .values()) that do not contain
copies of the keys, values or items, but rather reference
the underlying dict and pull their values out of the dict
as needed.