OrderDict จะซ้ำซ้อนใน Python 3.7 หรือไม่


92

จากการเปลี่ยนแปลง Python 3.7 :

ลักษณะการเก็บรักษาคำสั่งแทรกของวัตถุdict ได้รับการประกาศให้เป็นส่วนหนึ่งอย่างเป็นทางการของข้อกำหนดภาษา Python

นี่หมายความว่าOrderedDictจะซ้ำซ้อนหรือไม่? การใช้งานเดียวที่ฉันคิดได้คือการรักษาความเข้ากันได้แบบย้อนหลังกับ Python เวอร์ชันเก่าซึ่งไม่เก็บลำดับการแทรกสำหรับพจนานุกรมปกติ


ดูเพิ่มเติมที่: stackoverflow.com/questions/34305003/…
Boris

คำตอบ:


137

ไม่มันจะไม่ซ้ำซ้อนใน Python 3.7 เพราะOrderedDictไม่ใช่แค่การdictรักษาคำสั่งการแทรก แต่ยังมีวิธีการขึ้นอยู่กับคำสั่งOrderedDict.move_to_end()และรองรับreversed()การวนซ้ำ *

ยิ่งไปกว่านั้นการเปรียบเทียบความเท่าเทียมกันOrderedDictนั้นมีความอ่อนไหวต่อคำสั่งและนี่ก็ยังไม่ใช่กรณีสำหรับdictใน Python 3.7 เช่น:

>>> OrderedDict([(1,1), (2,2)]) == OrderedDict([(2,2), (1,1)]) 
False
>>> dict([(1,1), (2,2)]) == dict([(2,2), (1,1)]) 
True

สองคำถามที่เกี่ยวข้องที่นี่และที่นี่

* มีการเพิ่มการรองรับการreversed()ทำซ้ำ Python ปกติdictสำหรับ Python 3.8 โปรดดูที่issue33462


1
ประเด็นเกี่ยวกับความไวในการสั่งซื้อเมื่อเปรียบเทียบมีผลมากที่นี่
Tim Skov Jacobsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.