一、基本概念
在進行List根據對象屬性分組之前,我們需要先了解幾個基本概念:
List:是Python中常用的數據結構之一,是一組有序的元素集合。
對象:在Python中,一切皆是對象。對象是由類型(class)和數據(data)構成的。
屬性:對象具有的特性稱為屬性。例如,對於一個人的對象,他的年齡、身高、性別等就是他的屬性。
分組:根據某一標準,將一組數據按照相同的標準分成若干組,每組內部的元素具有相同的屬性。
二、List根據單個屬性分組
在實際開發中,我們常常需要將List中的元素按照某個屬性進行分組。例如,有一個學生成績單的List,我們想按照班級將學生分組,可以使用Python中的groupby函數。
from itertools import groupby class Student: def __init__(self, name, score, cls): self.name = name self.score = score self.cls = cls students = [ Student('Tom', 90, 'A'), Student('Jerry', 85, 'A'), Student('Peter', 92, 'B'), Student('Bob', 80, 'B'), Student('Alice', 95, 'C') ] students_sorted = sorted(students, key=lambda x: x.cls) for cls, group in groupby(students_sorted, key=lambda x: x.cls): print(cls) for student in group: print(student.name, student.score) print('\n')
上述代碼中,我們先定義了一個Student類,包含name、score、cls三個屬性。然後我們定義了一個學生列表students,將其按照班級從小到大進行排序後,使用groupby函數按照班級進行分組。
最後得到的結果是:
A
Tom 90
Jerry 85
B
Peter 92
Bob 80
C
Alice 95
三、List根據多個屬性分組
有時候我們需要按照多個屬性進行分組,此時我們可以先將List按照一個屬性進行排序,再使用groupby函數。
students_sorted = sorted(students, key=lambda x: (x.cls, x.score)) for cls, group in groupby(students_sorted, key=lambda x: x.cls): print(cls) for student in group: print(student.name, student.score) print('\n')
上述代碼中,我們先按照班級和成績進行排序,然後按照班級進行分組。
最後得到的結果是:
A
Jerry 85
Tom 90
B
Bob 80
Peter 92
C
Alice 95
四、List根據自定義函數分組
在某些情況下,我們需要按照自定義的函數進行分組。例如,我們需要按照學生姓名的首字母分組:
students_sorted = sorted(students, key=lambda x: x.name) for first_letter, group in groupby(students_sorted, key=lambda x: x.name[0]): print(first_letter) for student in group: print(student.name, student.score) print('\n')
上述代碼中,我們先按照學生姓名排序,然後按照名字的首字母進行分組。
最後得到的結果是:
A
Alice 95
B
Bob 80
J
Jerry 85
P
Peter 92
T
Tom 90
五、List根據屬性值分組後進行統計
除了將List按照屬性進行分組之外,我們常常還需要對每組進行統計。例如,求每個班級的平均分:
from collections import defaultdict score_dict = defaultdict(list) for student in students: score_dict[student.cls].append(student.score) for cls, scores in score_dict.items(): average_score = sum(scores) / len(scores) print(cls, average_score)
上述代碼中,我們使用defaultdict函數定義了一個字典score_dict,其鍵為班級,值為該班級的學生分數列表。然後遍歷每個班級的分數列表,求出該班級的平均分。
最後得到的結果是:
A 87.5
B 86.0
C 95.0
六、總結
List根據對象屬性分組是Python中常用的數據處理方式之一。本文介紹了如何使用groupby函數根據單個屬性、多個屬性和自定義函數進行分組,並對每組進行統計分析。實際開發中,我們可以根據具體需求靈活運用這些方法。
原創文章,作者:DARN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/134685.html