为什么 Python ChainMap 中的 Items 在转换为 Dictionary 时会颠倒顺序?
Why do the Items in a Python ChainMap reverse order when converted to a Dictionary?
为什么将 ChainMap 转换为字典会颠倒项目的顺序?
这是一个例子。
>>> d = [{'a': 1}, {'b': 2}, {'c': 3}]
>>> ChainMap(*d)
ChainMap({'a': 1}, {'b': 2}, {'c': 3})
>>> dict(ChainMap(*d))
{'c': 3, 'b': 2, 'a': 1}
我可以编写替代代码来组合不反转的字典。
但是,我想了解为什么 ChainMap 会发生这种逆转。
看来最好保留订单。
Note, the iteration order of a ChainMap() is determined by scanning the mappings last to first.
唯一提到为什么 ChainMap 这样做似乎是以下
This gives the same ordering as a series of dict.update() calls starting with the last mapping
与此同时,dict
保持几个版本之前的插入顺序
Dictionaries preserve insertion order. Note that updating a key does not affect the order. Keys added after deletion are inserted at the end.
Changed in version 3.7: Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6.
因此,当您调用 dict(ChainMap(*d))
时,它会遍历 ChainMap,即 *d
的相反顺序,并成为新 dict
.
的插入顺序
为什么将 ChainMap 转换为字典会颠倒项目的顺序?
这是一个例子。
>>> d = [{'a': 1}, {'b': 2}, {'c': 3}]
>>> ChainMap(*d)
ChainMap({'a': 1}, {'b': 2}, {'c': 3})
>>> dict(ChainMap(*d))
{'c': 3, 'b': 2, 'a': 1}
我可以编写替代代码来组合不反转的字典。
但是,我想了解为什么 ChainMap 会发生这种逆转。
看来最好保留订单。
Note, the iteration order of a ChainMap() is determined by scanning the mappings last to first.
唯一提到为什么 ChainMap 这样做似乎是以下
This gives the same ordering as a series of dict.update() calls starting with the last mapping
与此同时,dict
保持几个版本之前的插入顺序
Dictionaries preserve insertion order. Note that updating a key does not affect the order. Keys added after deletion are inserted at the end.
Changed in version 3.7: Dictionary order is guaranteed to be insertion order. This behavior was an implementation detail of CPython from 3.6.
因此,当您调用 dict(ChainMap(*d))
时,它会遍历 ChainMap,即 *d
的相反顺序,并成为新 dict
.