กำหนดลิสต์ของ dictionary ที่มี key 'name' และ 'roll' งานคือเรียงลำดับตามค่าต่างๆ
โค้ดตัวอย่าง
# Initializing list of dictionaries
my_list1 = [
{"name": "Adwaita", "roll": 100},
{"name": "Aadrika", "roll": 234},
{"name": "Sakya", "roll": 23}
]
print("The list is sorted by roll: ")
print(sorted(my_list1, key=lambda i: i['roll']))
print("\nThe list is sorted by name and roll: ")
print(sorted(my_list1, key=lambda i: (i['roll'], i['name'])))
print("\nThe list is sorted by roll in descending order: ")
print(sorted(my_list1, key=lambda i: i['roll'], reverse=True))
ผลลัพธ์
The list is sorted by roll:
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
The list is sorted by name and roll:
[{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
The list is sorted by roll in descending order:
[{'name': 'Aadrika', 'roll': 234}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Sakya', 'roll': 23}]
คำอธิบายเทคนิค
key=lambda i: i['roll']- เรียงตาม roll เดียวkey=lambda i: (i['roll'], i['name'])- เรียงตาม roll ก่อน ถ้าเท่ากันเรียงตาม namereverse=True- เรียงจากมากไปน้อย (descending)- ฟังก์ชัน
sorted()คืนลิสต์ใหม่ ไม่เปลี่ยนลิสต์เดิม (ใช้list.sort()ถ้าต้องการแก้ไขที่เดิม)
ตัวอย่างเพิ่มเติม: เรียงหลายเกณฑ์
# เรียงตาม name แล้วค่อย roll
print(sorted(my_list1, key=lambda i: (i['name'], i['roll'])))
# เรียงตามความยาวชื่อ
print(sorted(my_list1, key=lambda i: len(i['name'])))
สรุป: ใช้ sorted() ร่วมกับ lambda และ tuple ใน key เพื่อเรียงหลายเงื่อนไขได้อย่างยืดหยุ่น