bpo-35864: Replace OrderedDict with regular dict in namedtuple() (#11708)
* Change from OrderedDict to a regular dict * Add blurb
This commit is contained in:
parent
0897e0c597
commit
0bb4bdf0d9
|
@ -894,11 +894,18 @@ field names, the method and attribute names start with an underscore.
|
|||
|
||||
>>> p = Point(x=11, y=22)
|
||||
>>> p._asdict()
|
||||
OrderedDict([('x', 11), ('y', 22)])
|
||||
{'x': 11, 'y': 22}
|
||||
|
||||
.. versionchanged:: 3.1
|
||||
Returns an :class:`OrderedDict` instead of a regular :class:`dict`.
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
Returns a regular :class:`dict` instead of an :class:`OrderedDict`.
|
||||
As of Python 3.7, regular dicts are guaranteed to be ordered. If the
|
||||
extra features of :class:`OrderedDict` are required, the suggested
|
||||
remediation is to cast the result to the desired type:
|
||||
``OrderedDict(nt._asdict())``.
|
||||
|
||||
.. method:: somenamedtuple._replace(**kwargs)
|
||||
|
||||
Return a new instance of the named tuple replacing specified fields with new
|
||||
|
|
|
@ -125,6 +125,14 @@ New Modules
|
|||
Improved Modules
|
||||
================
|
||||
|
||||
* The :meth:`_asdict()` method for :func:`collections.namedtuple` now returns
|
||||
a :class:`dict` instead of a :class:`collections.OrderedDict`. This works because
|
||||
regular dicts have guaranteed ordering in since Python 3.7. If the extra
|
||||
features of :class:`OrderedDict` are required, the suggested remediation is
|
||||
to cast the result to the desired type: ``OrderedDict(nt._asdict())``.
|
||||
(Contributed by Raymond Hettinger in :issue:`35864`.)
|
||||
|
||||
|
||||
asyncio
|
||||
-------
|
||||
|
||||
|
|
|
@ -426,9 +426,11 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
|
|||
'Return a nicely formatted representation string'
|
||||
return self.__class__.__name__ + repr_fmt % self
|
||||
|
||||
_dict, _zip = dict, zip
|
||||
|
||||
def _asdict(self):
|
||||
'Return a new OrderedDict which maps field names to their values.'
|
||||
return OrderedDict(zip(self._fields, self))
|
||||
return _dict(_zip(self._fields, self))
|
||||
|
||||
def __getnewargs__(self):
|
||||
'Return self as a plain tuple. Used by copy and pickle.'
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
The _asdict() method for collections.namedtuple now returns a regular dict
|
||||
instead of an OrderedDict.
|
Loading…
Reference in New Issue