วิธีจัดเรียงพจนานุกรมตามค่าใน Python

บทนำ

พจนานุกรมใน 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() ฟังก์ชันเป็นที่นิยมและเชื่อถือได้มากที่สุดในการจัดเรียงพจนานุกรมตามค่าต่างๆ

ประทับเวลา:

เพิ่มเติมจาก สแต็ค