มีเพียงไม่กี่คนที่ปรากฏตัวขึ้นแม้จะมีคำตอบมากมายสำหรับคำถามนี้เพื่อชี้ให้เห็นว่าพจนานุกรมเป็นการแมปที่ไม่ได้เรียงลำดับและอื่น ๆ (จนถึงคำสั่งการแทรกด้วย Python 3.7) ความคิดของรายการ "แรก" ในพจนานุกรมที่สร้างขึ้นตามตัวอักษร ไม่มีความรู้สึก และแม้กระทั่งOrderedDictสามารถเข้าถึงได้โดยดัชนีตัวเลขโดยใช้ความอัปลักษณ์เช่นmydict[mydict.keys()[0]](Python 2 เท่านั้นเนื่องจากใน Python 3 keys()เป็นตัววนซ้ำที่ไม่สามารถห้อยลงได้)
ตั้งแต่ 3.7 เป็นต้นไปและในทางปฏิบัติใน 3,6 เช่นกัน - พฤติกรรมใหม่ได้รับการแนะนำแล้ว แต่ไม่รวมเป็นส่วนหนึ่งของข้อกำหนดภาษาจนถึง 3.7 - การวนซ้ำคีย์ค่าหรือรายการของคำสั่ง (และฉันเชื่อว่า a ตั้งค่าด้วย) จะให้วัตถุที่แทรกน้อยที่สุดก่อน ยังไม่มีวิธีง่ายๆในการเข้าถึงด้วยดัชนีตัวเลขของการแทรก
สำหรับคำถามเกี่ยวกับการเลือกและ "การจัดรูปแบบ" รายการหากคุณทราบคีย์ที่ต้องการดึงข้อมูลในพจนานุกรมโดยปกติคุณจะใช้คีย์ดังกล่าวเป็นตัวห้อยเพื่อดึงข้อมูล ( my_var = mydict['Apple'])
หากคุณต้องการจัดทำดัชนีรายการตามหมายเลขรายการ (โดยไม่สนใจว่าหมายเลขของรายการใดรายการหนึ่งจะเปลี่ยนไปเมื่อมีการแทรก) โครงสร้างที่เหมาะสมน่าจะเป็นรายการสิ่งสององค์ประกอบ แทน
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
คุณอาจใช้:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
ภายใต้ระบอบการปกครองนี้รายการแรกmylist[0]ในรูปแบบรายการ endexed ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})คลาสสิกและความคุ้มค่าของมันคือ คุณสามารถทำซ้ำรายการทั้งหมดได้ดังนี้:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
แต่ถ้าคุณรู้ว่าคุณกำลังมองหาคีย์ "Apple" ทำไมคุณไม่ใช้ dict แทนล่ะ?
คุณสามารถแนะนำระดับเพิ่มเติมของทิศทางได้โดยการแคชรายการคีย์ แต่ความซับซ้อนของการรักษาโครงสร้างข้อมูลสองแบบในการซิงโครไนซ์จะเพิ่มความซับซ้อนของโค้ดของคุณอย่างหลีกเลี่ยงไม่ได้