最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從基礎(chǔ)到進(jìn)階詳解Python如何根據(jù)列表中某字段排序

 更新時(shí)間:2026年03月29日 09:36:20   作者:detayun  
在 Python 開發(fā)中,我們經(jīng)常需要對(duì)列表(List)中的元素進(jìn)行排序,本文將詳細(xì)介紹 Python 中如何根據(jù)列表中某字段排序,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下

在 Python 開發(fā)中,我們經(jīng)常需要對(duì)列表(List)中的元素進(jìn)行排序。如果列表中的元素是簡單的數(shù)字或字符串,可以直接使用 sorted()list.sort() 方法。但如果列表中的元素是字典(dict)或自定義對(duì)象(class),并且需要根據(jù)某個(gè)字段(key)進(jìn)行排序,該怎么辦呢?

本文將詳細(xì)介紹 Python 中如何根據(jù)列表中某字段排序,涵蓋 字典列表排序自定義對(duì)象排序 以及 高級(jí)排序技巧(如多字段排序、降序排序等)。

1. 基礎(chǔ)排序:數(shù)字和字符串列表

如果列表中的元素是數(shù)字或字符串,可以直接使用 sorted()list.sort()

numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)  # 升序
print(sorted_numbers)  # [1, 1, 2, 3, 4, 5, 9]

numbers.sort(reverse=True)  # 降序(原地修改)
print(numbers)  # [9, 5, 4, 3, 2, 1, 1]

字符串排序:

words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words)
print(sorted_words)  # ['apple', 'banana', 'cherry', 'date']

2. 字典列表排序:根據(jù)某個(gè)鍵(key)排序

如果列表中的元素是字典,并且需要根據(jù)某個(gè)鍵(如 "age"、"score")排序,可以使用 sorted()key 參數(shù)。

示例 1:根據(jù)字典的某個(gè)鍵排序

students = [
    {"name": "Alice", "age": 20, "score": 90},
    {"name": "Bob", "age": 18, "score": 85},
    {"name": "Charlie", "age": 22, "score": 95}
]

# 按 age 升序排序
sorted_by_age = sorted(students, key=lambda x: x["age"])
print(sorted_by_age)
"""
[
    {'name': 'Bob', 'age': 18, 'score': 85},
    {'name': 'Alice', 'age': 20, 'score': 90},
    {'name': 'Charlie', 'age': 22, 'score': 95}
]
"""

# 按 score 降序排序
sorted_by_score_desc = sorted(students, key=lambda x: x["score"], reverse=True)
print(sorted_by_score_desc)
"""
[
    {'name': 'Charlie', 'age': 22, 'score': 95},
    {'name': 'Alice', 'age': 20, 'score': 90},
    {'name': 'Bob', 'age': 18, 'score': 85}
]
"""

示例 2:使用operator.itemgetter替代lambda

operator.itemgetter 可以替代 lambda,提高性能(適用于大數(shù)據(jù)量):

from operator import itemgetter

# 按 name 排序
sorted_by_name = sorted(students, key=itemgetter("name"))
print(sorted_by_name)
"""
[
    {'name': 'Alice', 'age': 20, 'score': 90},
    {'name': 'Bob', 'age': 18, 'score': 85},
    {'name': 'Charlie', 'age': 22, 'score': 95}
]
"""

3. 自定義對(duì)象排序:根據(jù)屬性排序

如果列表中的元素是自定義類的對(duì)象,并且需要根據(jù)某個(gè)屬性(如 age、score)排序,可以使用 sorted()key 參數(shù)或?qū)崿F(xiàn) __lt__ 方法。

示例 1:使用lambda按屬性排序

class Student:
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def __repr__(self):
        return f"Student(name={self.name}, age={self.age}, score={self.score})"

students = [
    Student("Alice", 20, 90),
    Student("Bob", 18, 85),
    Student("Charlie", 22, 95)
]

# 按 age 排序
sorted_by_age = sorted(students, key=lambda x: x.age)
print(sorted_by_age)
"""
[
    Student(name=Bob, age=18, score=85),
    Student(name=Alice, age=20, score=90),
    Student(name=Charlie, age=22, score=95)
]
"""

示例 2:實(shí)現(xiàn)__lt__方法(推薦)

如果經(jīng)常需要按某個(gè)屬性排序,可以在類中實(shí)現(xiàn) __lt__(小于)方法,這樣可以直接使用 sorted()list.sort()

class Student:
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def __lt__(self, other):
        return self.age < other.age  # 按 age 升序排序

    def __repr__(self):
        return f"Student(name={self.name}, age={self.age}, score={self.score})"

students = [
    Student("Alice", 20, 90),
    Student("Bob", 18, 85),
    Student("Charlie", 22, 95)
]

# 直接排序(無需 key 參數(shù))
sorted_students = sorted(students)
print(sorted_students)
"""
[
    Student(name=Bob, age=18, score=85),
    Student(name=Alice, age=20, score=90),
    Student(name=Charlie, age=22, score=95)
]
"""

如果需要按不同屬性排序,可以動(dòng)態(tài)修改 __lt__ 或使用 functools.cmp_to_key(較復(fù)雜,不推薦)。

4. 高級(jí)排序技巧

多字段排序

如果需要先按 age 排序,再按 score 排序,可以使用 tuple 作為 key

students = [
    {"name": "Alice", "age": 20, "score": 90},
    {"name": "Bob", "age": 18, "score": 85},
    {"name": "Charlie", "age": 20, "score": 95},
    {"name": "David", "age": 18, "score": 80}
]

# 先按 age 升序,再按 score 降序
sorted_students = sorted(
    students,
    key=lambda x: (x["age"], -x["score"])  # 負(fù)號(hào)實(shí)現(xiàn)降序(僅適用于數(shù)字)
)
# 或者更通用的方式:
sorted_students = sorted(students, key=lambda x: (x["age"], x["score"]), reverse=False)  # 先 age 升序,再 score 升序
# 如果需要 age 升序,score 降序,可以分兩步排序:
students.sort(key=lambda x: x["score"], reverse=True)  # 先按 score 降序
students.sort(key=lambda x: x["age"])  # 再按 age 升序(穩(wěn)定排序)
print(sorted_students)
"""
[
    {'name': 'David', 'age': 18, 'score': 80},
    {'name': 'Bob', 'age': 18, 'score': 85},
    {'name': 'Alice', 'age': 20, 'score': 90},
    {'name': 'Charlie', 'age': 20, 'score': 95}
]
"""

降序排序

使用 reverse=True 實(shí)現(xiàn)降序:

numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)  # [9, 5, 4, 3, 2, 1, 1]

自定義排序邏輯(functools.cmp_to_key)

如果排序邏輯較復(fù)雜(如按字符串長度排序),可以使用 functools.cmp_to_key

from functools import cmp_to_key

words = ["banana", "apple", "cherry", "date"]

# 自定義比較函數(shù):按字符串長度排序
def compare(a, b):
    if len(a) < len(b):
        return -1
    elif len(a) > len(b):
        return 1
    else:
        return 0

sorted_words = sorted(words, key=cmp_to_key(compare))
print(sorted_words)  # ['date', 'apple', 'banana', 'cherry']

5. 總結(jié)

排序場景方法示例
數(shù)字/字符串列表排序sorted() 或 list.sort()sorted([3, 1, 4])
字典列表按某鍵排序sorted(list, key=lambda x: x["key"])sorted(students, key=lambda x: x["age"])
自定義對(duì)象按屬性排序sorted(list, key=lambda x: x.attr) 或 __lt__sorted(students, key=lambda x: x.age)
多字段排序sorted(list, key=lambda x: (x["key1"], x["key2"]))sorted(students, key=lambda x: (x["age"], x["score"]))
降序排序reverse=Truesorted(numbers, reverse=True)
復(fù)雜排序邏輯functools.cmp_to_keysorted(words, key=cmp_to_key(compare))

推薦做法

  • 優(yōu)先使用 sorted()(非原地排序)或 list.sort()(原地排序)。
  • 字典列表排序推薦 lambdaoperator.itemgetter
  • 自定義對(duì)象排序推薦實(shí)現(xiàn) __lt__ 方法。
  • 多字段排序推薦使用 tuple 作為 key。

到此這篇關(guān)于從基礎(chǔ)到進(jìn)階詳解Python如何根據(jù)列表中某字段排序的文章就介紹到這了,更多相關(guān)Python列表排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

芷江| 荣昌县| 寿宁县| 绥芬河市| 武宁县| 峨眉山市| 达拉特旗| 渝北区| 安新县| 婺源县| 木兰县| 宁波市| 庄河市| 灌阳县| 嘉荫县| 监利县| 康平县| 玉溪市| 黄石市| 昌吉市| 河间市| 瑞丽市| 米林县| 台安县| 沙河市| 辽阳县| 仁怀市| 奇台县| 江达县| 晋江市| 荣昌县| 泰宁县| 鞍山市| 凉城县| 赤水市| 丰顺县| 班玛县| 永靖县| 丘北县| 二连浩特市| 巍山|