Return a (key, value) iterator for almost any dict-like object.
(dictlike)
| 1557 | |
| 1558 | |
| 1559 | def dictlike_iteritems(dictlike): |
| 1560 | """Return a (key, value) iterator for almost any dict-like object.""" |
| 1561 | |
| 1562 | if hasattr(dictlike, "items"): |
| 1563 | return list(dictlike.items()) |
| 1564 | |
| 1565 | getter = getattr(dictlike, "__getitem__", getattr(dictlike, "get", None)) |
| 1566 | if getter is None: |
| 1567 | raise TypeError("Object '%r' is not dict-like" % dictlike) |
| 1568 | |
| 1569 | if hasattr(dictlike, "iterkeys"): |
| 1570 | |
| 1571 | def iterator(): |
| 1572 | for key in dictlike.iterkeys(): |
| 1573 | assert getter is not None |
| 1574 | yield key, getter(key) |
| 1575 | |
| 1576 | return iterator() |
| 1577 | elif hasattr(dictlike, "keys"): |
| 1578 | return iter((key, getter(key)) for key in dictlike.keys()) |
| 1579 | else: |
| 1580 | raise TypeError("Object '%r' is not dict-like" % dictlike) |
| 1581 | |
| 1582 | |
| 1583 | class classproperty(property): |
no test coverage detected