Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เรียงลำดับลิสต์ของดิกชันนารีตามค่าด้วย Lambda Function ใน Python


เมื่อต้องการเรียงลำดับลิสต์ที่มีดิกชันนารีเป็นองค์ประกอบ ตามค่าเฉพาะ (เช่น age) ใช้ sorted() กับ lambda

ตัวอย่างโค้ด

from operator import itemgetter

people = [
    {"name": "Will", "age": 56},
    {"name": "Rob", "age": 20},
    {"name": "Mark", "age": 34},
    {"name": "John", "age": 24}
]

print("Sorted by age:")
print(sorted(people, key=lambda x: x['age']))

print("Sorted by age then name:")
print(sorted(people, key=lambda x: (x['age'], x['name'])))

print("Sorted by age descending:")
print(sorted(people, key=lambda x: x['age'], reverse=True))

ผลลัพธ์

Sorted by age: [{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will', 'age': 56}]
Sorted by age then name: [{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will', 'age': 56}]
Sorted by age descending: [{'name': 'Will', 'age': 56}, {'name': 'Mark', 'age': 34}, {'name': 'John', 'age': 24}, {'name': 'Rob', 'age': 20}]

คำอธิบาย

  • lambda x: x['age'] ดึงค่า age มาเป็นเกณฑ์การเรียง

  • lambda x: (x['age'], x['name']) เรียงตาม age ก่อน แล้วค่อย name (tuple comparison)

  • reverse=True เรียงจากมากไปน้อย

  • Lambda ใช้สร้างฟังก์ชันนิรนามสั้นๆ สำหรับ key function