[Python-ideas] Iteritems() function?

Jan Kaliszewski zuo at chopin.edu.pl
Wed Jun 8 13:01:08 CEST 2011


Case
====
Quite typical: iterate and do something with some_items -- a collection
of 2-element items.
 for first, second in some_items:
 ...
But for dicts it must use another form:
 for first, second in some_items.items():
 ...
We must know it'll be a mapping, and even then quite usual bug is to
forget to add that `items()'.
But sometimes it may be a dict {first: second, ...} OR a seq [(first,
second), ...] and in fact we are not interested in it -- we simply want
to iterate over its items... But we are forced to do type/interface
check, e.g.:
 if isinstance(coll, collections.Mapping):
 for first, second in some_items.items(): ...
 else:
 for first, second in some_items: ...
Idea
====
A new function:
 builtins.iteritems()
or
 builtins.iterpairs()
or
 itertools.items()
or
 itertools.pairs()
(don't know what name would be the best)
-- equivalent to:
 def <one of the above names>(coll):
 iterable = (coll.items()
 if isinstance(coll, collections.Mapping)
 else coll)
 return iter(iterable)
or maybe something like:
 def <one of the above names>(coll):
 try:
 iterable = coll.items()
 except AttributeError:
 iterable = coll
 return iter(iterable)
Usage
=====
Then, in our example case, we'd do simply:
 for first, second in iteritems(some_items):
 ...
And we don't need to think about some_items type, whether it's a mapping
or 2-tuple sequence. All we need to know is that it's a collection of
2-element items.
Regards,
*j


More information about the Python-ideas mailing list

AltStyle によって変換されたページ (->オリジナル) /