為什么將 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 會發生這種逆轉。
似乎希望保持秩序。
uj5u.com熱心網友回復:
ChainMap檔案提到
請注意,ChainMap() 的迭代順序是通過從最后掃描到第一個映射來確定的。
唯一提到 ChainMap 這樣做的原因似乎如下
這給出了與從最后一個映射開始的一系列 dict.update() 呼叫相同的順序
同時,dict維護從幾個版本之前的插入順序
字典保留插入順序。請注意,更新密鑰不會影響順序。洗掉后添加的鍵插入到最后。
在 3.7 版更改: 字典順序保證為插入順序。這種行為是 CPython 3.6 的實作細節。
因此,當您呼叫時dict(ChainMap(*d)),它會遍歷 ChainMap 即相反的順序,*d這將成為新的插入順序dict。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412419.html
標籤:
