ตั้งแต่Python 3.6คำสั่งในตัวจะได้รับคำสั่ง
ข่าวดีดังนั้นกรณีการใช้งานดั้งเดิมของ OP ของการจับคู่คู่ที่ดึงมาจากฐานข้อมูลที่มีรหัสสตริงที่ไม่ซ้ำกันเป็นคีย์และค่าตัวเลขเป็นค่าใน Python v3.6 + dict ในตัวตอนนี้ควรเคารพคำสั่งแทรก
หากกล่าวว่าเป็นนิพจน์ตารางคอลัมน์ที่เป็นผลลัพธ์สองรายการจากแบบสอบถามฐานข้อมูลเช่น:
SELECT a_key, a_value FROM a_table ORDER BY a_value;
จะถูกเก็บไว้ใน Python tuples สองรายการคือ k_seq และ v_seq (จัดเรียงตามดัชนีตัวเลขและมีความยาวเท่ากันแน่นอน) จากนั้น:
k_seq = ('foo', 'bar', 'baz')
v_seq = (0, 1, 42)
ordered_map = dict(zip(k_seq, v_seq))
อนุญาตให้ส่งออกในภายหลังเป็น:
for k, v in ordered_map.items():
print(k, v)
ให้ผลในกรณีนี้ (สำหรับ Pict 3.6 บิ ธ ในตัวใหม่!):
foo 0
bar 1
baz 42
ในการเรียงลำดับเดียวกันต่อมูลค่าของ v
ตำแหน่งที่ติดตั้ง Python 3.5 บนเครื่องของฉันมีอยู่ในปัจจุบัน:
bar 1
foo 0
baz 42
รายละเอียด:
ตามที่เสนอในปี 2012 โดย Raymond Hettinger (เทียบกับอีเมลใน python-dev กับหัวเรื่อง"พจนานุกรมขนาดกะทัดรัดที่มีการวนซ้ำเร็วขึ้น" ) และตอนนี้ (ในปี 2559) ประกาศโดย Victor Stinner ไปยัง python-dev กับหัวเรื่อง"Python 3.6 dict กระชับและรับรุ่นส่วนตัวและคำหลักจะกลายเป็นคำสั่ง "เนื่องจากการแก้ไข / การใช้งานของปัญหา 27350 " กะทัดรัดและสั่งการ Dict "ใน Python 3.6 ตอนนี้เราจะสามารถใช้ dict ในตัวเพื่อรักษาคำสั่งแทรก !!
หวังว่าสิ่งนี้จะนำไปสู่การปรับใช้เลเยอร์แบบบางของ OrderedDict เป็นขั้นตอนแรก ตามที่ @ JimFasarakis-Hilliard ระบุว่าบางคนเห็นกรณีการใช้งานสำหรับประเภท OrderedDict ในอนาคต ฉันคิดว่าชุมชน Python ที่มีขนาดใหญ่จะทำการตรวจสอบอย่างรอบคอบหากสิ่งนี้จะพิสูจน์การทดสอบของเวลาและขั้นตอนต่อไปจะเป็นอย่างไร
ถึงเวลาคิดใหม่นิสัยการเขียนโค้ดของเราเพื่อไม่ให้พลาดโอกาสที่จะเกิดขึ้นจากการสั่งซื้อที่มั่นคงของ:
- อาร์กิวเมนต์คำหลักและ
- ที่เก็บข้อมูล dict (ระดับกลาง)
ครั้งแรกเพราะมันช่วยลดความยุ่งยากในการใช้งานฟังก์ชั่นและวิธีการในบางกรณี
ประการที่สองตามที่มันสนับสนุนให้ใช้dict
หน่วยความจำกลางในการประมวลผลท่อได้ง่ายขึ้น
Raymond Hettinger กรุณาให้เอกสารอธิบาย " เทคโนโลยีเบื้องหลัง Python 3.6 พจนานุกรม " - จากการนำเสนอกลุ่มการประชุมกลุ่ม Python Meetup ของซานฟรานซิสโก 2016-DEC-08
และบางทีคำถามและคำตอบที่มีการตกแต่งอย่างสูงของ Stack Overflow อาจจะได้รับข้อมูลหลากหลายและคำตอบที่มีคุณภาพจำนวนมากจะต้องมีการอัปเดตต่อรุ่นด้วยเช่นกัน
Caveat Emptor (แต่โปรดดูด้านล่างอัพเดท 2017-12-15):
ในฐานะที่เป็น @ajcr อย่างถูกต้องบันทึก: "แง่มุมการรักษาคำสั่งของการใช้งานใหม่นี้ถือว่าเป็นรายละเอียดการใช้งานและไม่ควรพึ่งพา" (จากwhatsnew36 ) ไม่ใช่การหยิบของ nit แต่การอ้างอิงถูกตัดในแง่ร้ายเล็กน้อย ;-) มันยังดำเนินต่อไปเป็น "(สิ่งนี้อาจเปลี่ยนแปลงได้ในอนาคต แต่ต้องการให้มีการนำ dict ใหม่นี้มาใช้ในภาษาเพื่อเผยแพร่ไม่กี่ครั้งก่อนที่จะเปลี่ยนข้อมูลจำเพาะภาษาเป็นอาณัติรักษาคำสั่งสำหรับการใช้งาน Python ปัจจุบันและอนาคตทั้งหมด ช่วยรักษาความเข้ากันได้ย้อนหลังกับภาษารุ่นเก่าที่มีการเรียงลำดับการสุ่มซ้ำยังคงมีผลบังคับใช้เช่น Python 3.5)
ดังนั้นในขณะที่มนุษย์บางภาษา (เช่นภาษาเยอรมัน), การใช้รูปร่างภาษาและในขณะนี้จะได้รับการประกาศ ... ในwhatsnew36
อัพเดท 2017-12-15:
ในจดหมายไปยังรายการ python-dev , Guido van Rossum ประกาศ:
ทำให้เป็นเช่นนั้น "Dict เก็บคำสั่งแทรก" เป็นคำสั่ง ขอบคุณ!
ดังนั้นรุ่น 3.6 CPython ผลข้างเคียงของการสั่งการใส่ dict ตอนนี้กลายเป็นส่วนหนึ่งของข้อมูลจำเพาะของภาษา เธรดเมลนั้นยังแสดงถึงเป้าหมายการออกแบบที่แตกต่างเพื่อcollections.OrderedDict
ให้ได้รับการเตือนจาก Raymond Hettinger ระหว่างการสนทนา