Python> = 3.5 ทางเลือก: แกะลงในรายการตามตัวอักษร [*newdict]
มีการเปิดตัวการสรุปทั่วไปใหม่(PEP 448)ด้วย Python 3.5 ที่ให้คุณทำสิ่งต่อไปนี้ได้อย่างง่ายดาย:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
การคลายการ*
ทำงานกับวัตถุใด ๆที่ทำซ้ำได้และเนื่องจากพจนานุกรมส่งคืนคีย์ของพวกเขาเมื่อทำซ้ำคุณจึงสามารถสร้างรายการได้อย่างง่ายดายโดยใช้ภายในรายการตามตัวอักษร
การเพิ่ม.keys()
ie [*newdict.keys()]
อาจช่วยในการทำให้เจตนาของคุณชัดเจนขึ้นแม้ว่าจะทำให้คุณต้องเสียค่าใช้จ่ายในการค้นหาและเรียกใช้ฟังก์ชัน (ซึ่งในความซื่อสัตย์สุจริตทั้งหมดคือสิ่งที่คุณไม่ควรจริงๆจะกังวลเกี่ยวกับ)
*iterable
ไวยากรณ์จะคล้ายกับการทำlist(iterable)
และพฤติกรรมของมันถูกบันทึกครั้งแรกในส่วนการโทรของคู่มือหลามอ้างอิง ด้วย PEP 448 ข้อ จำกัด เกี่ยวกับตำแหน่งที่*iterable
สามารถปรากฏได้ถูกปล่อยให้วางไว้ในรายการตั้งค่าและ tuple ตัวอักษรคู่มืออ้างอิงในรายการ Expressionได้รับการอัปเดตเพื่อระบุสิ่งนี้
แม้ว่าเทียบเท่าlist(newdict)
กับความแตกต่างที่เร็วขึ้น (อย่างน้อยสำหรับพจนานุกรมขนาดเล็ก) เพราะไม่มีการเรียกใช้ฟังก์ชัน:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
ด้วยพจนานุกรมที่มีขนาดใหญ่กว่าความเร็วก็ค่อนข้างจะเหมือนกัน (ค่าใช้จ่ายในการวนซ้ำผ่านคอลเลกชันขนาดใหญ่ทำให้ค่าใช้จ่ายการโทรฟังก์ชั่นใหญ่)
ในทำนองเดียวกันคุณสามารถสร้างสิ่งอันดับและชุดของพจนานุกรมคีย์:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
ระวังเครื่องหมายจุลภาคต่อท้ายในกรณี tuple!