對於Python字典視圖.values(),.keys().items()是否有序的解答。


 Coldwings Coldwings ​ Python 話題的優秀回答者 如果按照語言規范來看,Python的規范里沒有說明Dict是一個有序的類型。換句話說,dict就是無序的,因為語言規范不保證它按照什么順序出來。要有序,請使用OrderedDict。 但是無序不是說每次輸出結果都不同,無序只是指結果不保證一定與插入順序一致而已。 CPython 3.6里對dict有個新的實現,使得字典內部存儲的順序不僅僅與key有關,還與插入順序有關。
但是有關並不代表它就一定按照插入順序依次出現(似乎當字典實現在內存中進行擴展的時候就可能造成結果不一致),
只不過表示如果key相同,插入順序相同,那么結果也是相同的。 在此之前,用values和keys方法取到的list僅與key(准確的說是key的__hash__)有關而與插入順序無關。

 

 字典是無序的,這句話是對的。但是字典的存儲過程卻是按順序的。字典的存儲背后的邏輯是散列表,也就是稀疏數組。
    -> dict初始化之后,Python解釋器會給dict分配一定的空間,往字典里添加是按順序添加的。
    -> 但是,如果如果繼續往字典里添加新鍵,有可能會引起Python解釋器對存儲空間的擴容,擴容的過程會新建散列表,
    -> 然后復制已有的元素到新散列表,這個過程可能會引起散列沖突,導致dict的鍵值對的次序發生變化。
    -> 《流暢的Python》一書有關於字典的存儲更為詳細的介紹。如果不了解散列表,可以查資料。

作者:陳子坤
鏈接:https://www.zhihu.com/question/65855807/answer/261889672
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處
 
        

 

指導鏈接:https://www.zhihu.com/question/65855807

 

以上兩個答案我覺的應該解釋的比較正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM