This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
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) * (Python committer) | 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) * (Python committer) | 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) * (Python committer) | 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) (Python triager) | 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) * (Python committer) | 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 | |