mirror of
https://github.com/python/cpython
synced 2026-09-29 08:20:29 +03:00
Issue #19505: The items, keys, and values views of OrderedDict now support
reverse iteration using reversed().
This commit is contained in:
parent
3d1e2e4cbb
commit
578c9211d6
4 changed files with 41 additions and 3 deletions
|
|
@ -978,6 +978,9 @@ The :class:`OrderedDict` constructor and :meth:`update` method both accept
|
|||
keyword arguments, but their order is lost because Python's function call
|
||||
semantics pass-in keyword arguments using a regular unordered dictionary.
|
||||
|
||||
.. versionchanged:: 3.5
|
||||
The items, keys, and values :term:`views <view>` of :class:`OrderedDict` now
|
||||
support reverse iteration using :func:`reversed`.
|
||||
|
||||
:class:`OrderedDict` Examples and Recipes
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -20,6 +20,23 @@ from reprlib import recursive_repr as _recursive_repr
|
|||
### OrderedDict
|
||||
################################################################################
|
||||
|
||||
class _OrderedDictKeysView(KeysView):
|
||||
|
||||
def __reversed__(self):
|
||||
yield from reversed(self._mapping)
|
||||
|
||||
class _OrderedDictItemsView(ItemsView):
|
||||
|
||||
def __reversed__(self):
|
||||
for key in reversed(self._mapping):
|
||||
yield (key, self._mapping[key])
|
||||
|
||||
class _OrderedDictValuesView(ValuesView):
|
||||
|
||||
def __reversed__(self):
|
||||
for key in reversed(self._mapping):
|
||||
yield self._mapping[key]
|
||||
|
||||
class _Link(object):
|
||||
__slots__ = 'prev', 'next', 'key', '__weakref__'
|
||||
|
||||
|
|
@ -162,9 +179,19 @@ class OrderedDict(dict):
|
|||
return size
|
||||
|
||||
update = __update = MutableMapping.update
|
||||
keys = MutableMapping.keys
|
||||
values = MutableMapping.values
|
||||
items = MutableMapping.items
|
||||
|
||||
def keys(self):
|
||||
"D.keys() -> a set-like object providing a view on D's keys"
|
||||
return _OrderedDictKeysView(self)
|
||||
|
||||
def items(self):
|
||||
"D.items() -> a set-like object providing a view on D's items"
|
||||
return _OrderedDictItemsView(self)
|
||||
|
||||
def values(self):
|
||||
"D.values() -> an object providing a view on D's values"
|
||||
return _OrderedDictValuesView(self)
|
||||
|
||||
__ne__ = MutableMapping.__ne__
|
||||
|
||||
__marker = object()
|
||||
|
|
|
|||
|
|
@ -1187,6 +1187,11 @@ class TestOrderedDict(unittest.TestCase):
|
|||
self.assertEqual(list(od.items()), pairs)
|
||||
self.assertEqual(list(reversed(od)),
|
||||
[t[0] for t in reversed(pairs)])
|
||||
self.assertEqual(list(reversed(od.keys())),
|
||||
[t[0] for t in reversed(pairs)])
|
||||
self.assertEqual(list(reversed(od.values())),
|
||||
[t[1] for t in reversed(pairs)])
|
||||
self.assertEqual(list(reversed(od.items())), list(reversed(pairs)))
|
||||
|
||||
def test_popitem(self):
|
||||
pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #19505: The items, keys, and values views of OrderedDict now support
|
||||
reverse iteration using reversed().
|
||||
|
||||
- Issue #21149: Improved thread-safety in logging cleanup during interpreter
|
||||
shutdown. Thanks to Devin Jeanpierre for the patch.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue