บทนำ
พจนานุกรมใน Python คือชุดของรายการที่เก็บข้อมูลเป็นคู่คีย์-ค่า ใน Python 3.7 และเวอร์ชันที่ใหม่กว่า พจนานุกรมจะจัดเรียงตามลำดับของการแทรกรายการ ในเวอร์ชันก่อนๆ
ในบทความนี้ เราจะมาดูวิธีที่เราสามารถจัดเรียงพจนานุกรมตามค่าที่มีอยู่ในพจนานุกรม
เรียงพจนานุกรมโดยใช้ a for ห่วง
เราสามารถจัดเรียงพจนานุกรมโดยใช้ a for
ห่วง อันดับแรก เราใช้ sorted()
ทำหน้าที่เรียงลำดับค่าของพจนานุกรม จากนั้นเราวนซ้ำค่าที่จัดเรียง ค้นหาคีย์สำหรับแต่ละค่า เราเพิ่มคู่คีย์-ค่าเหล่านี้ตามลำดับการจัดเรียงลงในพจนานุกรมใหม่
หมายเหตุ การเรียงลำดับไม่อนุญาตให้คุณจัดลำดับพจนานุกรมใหม่ เรากำลังเขียนคู่ที่เรียงลำดับในพจนานุกรมที่ว่างเปล่าใหม่ทั้งหมด
dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values())
sorted_dict = {}
for i in sorted_values:
for k in dict1.keys():
if dict1[k] == i:
sorted_dict[k] = dict1[k]
print(sorted_dict)
หากคุณเรียกใช้สิ่งนี้ด้วยล่าม Python คุณจะเห็น:
{1: 1, 3: 4, 2: 9}
ตอนนี้เราได้เห็นวิธีการเรียงลำดับด้วยลูปแล้ว มาดูทางเลือกยอดนิยมที่ใช้ sorted()
ฟังก์ชัน
เรียงลำดับพจนานุกรมโดยใช้ จัดเรียง () ฟังก์ชัน
ก่อนหน้านี้เราใช้ sorted()
ฟังก์ชันเพื่อจัดเรียงค่าของอาร์เรย์ เมื่อจัดเรียงพจนานุกรม เราสามารถส่งต่ออาร์กิวเมนต์หนึ่งไปยัง sorted()
ทำหน้าที่ดังนี้: sorted(dict1, key=dict1.get)
.
ที่นี่ key
เป็นฟังก์ชันที่เรียกใช้ในแต่ละองค์ประกอบก่อนที่จะเปรียบเทียบค่าสำหรับการเรียงลำดับ ดิ get()
เมธอดบนวัตถุพจนานุกรมจะคืนค่าของคีย์ของพจนานุกรม
พื้นที่ sorted(dict1, key=dict1.get)
นิพจน์จะส่งคืนรายการคีย์ที่มีค่าต่างๆ เรียงตามลำดับ จากที่นั่น เราสามารถสร้างพจนานุกรมที่เรียงลำดับใหม่ได้:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)
for w in sorted_keys:
sorted_dict[w] = dict1[w]
print(sorted_dict)
การใช้ sorted()
ฟังก์ชันได้ลดจำนวนโค้ดที่เราต้องเขียนเมื่อใช้ for
ลูป อย่างไรก็ตาม เราสามารถรวม sorted()
ทำงานด้วย itemgetter()
ฟังก์ชันสำหรับวิธีแก้ปัญหาที่กระชับยิ่งขึ้นในการเรียงลำดับพจนานุกรมตามค่าต่างๆ
เรียงลำดับพจนานุกรมโดยใช้ ผู้ประกอบการ โมดูลและ ผู้เอารายการ()
พื้นที่ operator
โมดูลประกอบด้วย itemgetter()
การทำงาน. ฟังก์ชันนี้ส่งคืนอ็อบเจ็กต์ callable ที่ส่งคืนไอเท็มจากอ็อบเจ็กต์
ตัวอย่างเช่น ลองใช้ itemgetter()
เพื่อสร้างวัตถุที่เรียกได้ซึ่งคืนค่าของพจนานุกรมใด ๆ ด้วยคีย์ที่ 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1))
ทุกพจนานุกรมมีสิทธิ์เข้าถึง items()
กระบวนการ. ฟังก์ชันนี้ส่งคืนคู่คีย์-ค่าของพจนานุกรมเป็นรายการทูเพิล เราสามารถเรียงลำดับรายการของทูเพิลได้โดยใช้เครื่องหมาย itemgetter()
ฟังก์ชันดึงค่าที่สองของทูเพิล เช่น ค่าของคีย์ในพจนานุกรม
เมื่อจัดเรียงแล้ว เราสามารถสร้างพจนานุกรมตามค่าเหล่านี้ได้:
import operator
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
ด้วยความพยายามที่น้อยลง เรามีพจนานุกรมที่จัดเรียงตามค่าต่างๆ!
ในฐานะที่เป็น key
อาร์กิวเมนต์ยอมรับฟังก์ชันใด ๆ เราสามารถใช้ฟังก์ชันแลมบ์ดาเพื่อส่งกลับค่าพจนานุกรมเพื่อให้สามารถจัดเรียงได้ มาดูกันว่าเป็นอย่างไร
จัดเรียงพจนานุกรมโดยใช้ฟังก์ชันแลมบ์ดา
ฟังก์ชัน Lambda เป็นฟังก์ชันที่ไม่ระบุตัวตนหรือไม่ระบุชื่อใน Python เราสามารถใช้ฟังก์ชันแลมบ์ดาเพื่อรับค่าของรายการพจนานุกรมโดยไม่ต้องนำเข้า operator
โมดูลสำหรับ itemgetter()
. หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับแลมบ์ดา คุณสามารถอ่านเกี่ยวกับแลมบ์ดาได้ในคู่มือ ฟังก์ชันแลมบ์ดาใน Python.
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
มาจัดเรียงพจนานุกรมตามค่าโดยใช้ฟังก์ชันแลมบ์ดาใน key
ข้อโต้แย้งของ sorted()
:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
โปรดทราบว่าวิธีการที่เราได้พูดคุยกันจนถึงตอนนี้ใช้ได้กับ Python 3.7 และใหม่กว่าเท่านั้น มาดูกันว่าเราจะทำอะไรได้บ้างสำหรับ Python เวอร์ชันก่อนหน้า
การส่งคืนพจนานุกรมใหม่พร้อมค่าที่จัดเรียง
หลังจากจัดเรียงพจนานุกรมตามค่าแล้ว หากต้องการเก็บพจนานุกรมที่จัดเรียงไว้ใน Python เวอร์ชันก่อน 3.7 คุณต้องใช้ OrderedDict
– มีอยู่ใน collections
โมดูล. วัตถุเหล่านี้เป็นพจนานุกรมที่รักษาลำดับการแทรก
นี่คือตัวอย่างการเรียงลำดับและการใช้ OrderedDict
:
import operator
from collections import OrderedDict
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = OrderedDict()
for k, v in sorted_tuples:
sorted_dict[k] = v
print(sorted_dict)
สรุป
บทช่วยสอนนี้แสดงให้เห็นว่าสามารถจัดเรียงพจนานุกรมตามค่าของพจนานุกรมได้อย่างไร ก่อนอื่นเราจัดเรียงพจนานุกรมโดยใช้สองลูป จากนั้นเราปรับปรุงการเรียงลำดับของเราโดยใช้ sorted()
การทำงาน. เราเคยเห็น itemgetter()
ฟังก์ชันจาก operator
โมดูลสามารถทำให้โซลูชันของเรากระชับยิ่งขึ้น
สุดท้าย เราได้ปรับโซลูชันของเราให้ทำงานกับ Python เวอร์ชันที่ต่ำกว่า 3.7
รูปแบบต่างๆ ของ sorted()
ฟังก์ชันเป็นที่นิยมและเชื่อถือได้มากที่สุดในการจัดเรียงพจนานุกรมตามค่าต่างๆ