Issue19505
Created on 2013-11-05 16:17 by ThiefMaster, last changed 2022-04-11 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| OrderedDict_reversed_views.patch | serhiy.storchaka, 2013-11-06 21:29 | review | ||
| Messages (6) | |||
|---|---|---|---|
| msg202221 - (view) | Author: ThiefMaster (ThiefMaster) | Date: 2013-11-05 16:17 | |
The view objects for `collections.OrderedDict` do not implement `__reversed__` so something like this fails:
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> reversed(od.viewvalues())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument to reversed() must be a sequence
|
|||
| msg202247 - (view) | Author: Eric Snow (eric.snow) * | Date: 2013-11-05 23:41 | |
The view objects aren't sequences. od.items() and od.keys() implement Set. od.values() doesn't even do that much, only implementing __len__(), __iter__(), and __contains__(). The glossary implies that you should use "reversed(list(view))". [1] More information on mapping views is located in the docs for collections.ABC and for dict. [2][3] The source for the Mapping views is also helpful. [4] Keep in mind that OrderedDict is not a sequence-like dict. It is essentially just a dict with a well-defined iteration order (by insertion order). [5] Just like its views, it should not used as a sequence. [1] http://docs.python.org/3/glossary.html#term-view [2] http://docs.python.org/3/library/stdtypes.html#dict-views [3] http://docs.python.org/3/library/collections.abc.html#collections.abc.MappingView [4] http://hg.python.org/cpython/file/3.3/Lib/collections/abc.py#l435 [5] http://docs.python.org/3.3/library/collections.html#collections.OrderedDict |
|||
| msg202290 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2013-11-06 21:29 | |
We can't add __reversed__() to the Set or MappingView protocols without breaking third party code, but we can add it to concrete implementations of mapping views. In particular for views of OrderedDict which itself already have __reversed__(). Here is a patch which makes OrderedDict's views reversible. |
|||
| msg215424 - (view) | Author: Raymond Hettinger (rhettinger) * | Date: 2014-04-03 05:57 | |
This is approved. Go ahead and apply the patch. One minor nit, please position the three new views classes before the _Link class rather than after. |
|||
| msg215514 - (view) | Author: Roundup Robot (python-dev) | Date: 2014-04-04 12:21 | |
New changeset cee010fecdf5 by Serhiy Storchaka in branch 'default': Issue #19505: The items, keys, and values views of OrderedDict now support http://hg.python.org/cpython/rev/cee010fecdf5 |
|||
| msg215516 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * | Date: 2014-04-04 12:47 | |
Done. Thank you Raymond for your review. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:57:53 | admin | set | github: 63704 |
| 2014-04-04 12:47:57 | serhiy.storchaka | set | status: open -> closed resolution: fixed messages: + msg215516 stage: patch review -> resolved |
| 2014-04-04 12:21:05 | python-dev | set | nosy:
+ python-dev messages: + msg215514 |
| 2014-04-03 05:57:03 | rhettinger | set | assignee: rhettinger -> serhiy.storchaka messages: + msg215424 versions: + Python 3.5, - Python 3.4 |
| 2013-11-06 21:29:54 | serhiy.storchaka | set | files:
+ OrderedDict_reversed_views.patch keywords: + patch messages: + msg202290 stage: patch review |
| 2013-11-06 20:26:09 | rhettinger | set | priority: normal -> low type: enhancement versions: - Python 2.7, Python 3.3 |
| 2013-11-05 23:41:08 | eric.snow | set | nosy:
+ eric.snow messages: + msg202247 |
| 2013-11-05 21:07:27 | serhiy.storchaka | set | nosy:
+ stutzbach, serhiy.storchaka versions: + Python 3.3, Python 3.4, - Python 3.1, Python 3.2 |
| 2013-11-05 20:45:55 | benjamin.peterson | set | assignee: rhettinger nosy: + rhettinger |
| 2013-11-05 16:17:58 | ThiefMaster | create | |