为什么 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 会发生这种逆转。

看来最好保留订单。

ChainMap documentation 提及

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.

的插入顺序