任務很簡單。
輸入:字典串列。每個字典包含兩個鍵:class、studentid。
輸出:字典,鍵 = 類,值 = 學生 ID 串列
到目前為止,最好的方法是 for 回圈。但是,我想知道這是否可以進一步簡化(或提高效率)。如果可以在 Python 之外解決類似形式的問題,我很高興學習。
from collections import defaultdict
students = [
{'class': 1, 'studentid': 1},
{'class': 1, 'studentid': 2},
{'class': 2, 'studentid': 3},
{'class': 2, 'studentid': 4},
{'class': 3, 'studentid': 5}
]
classes = defaultdict(list)
for student in students:
classno = student['class']
classes[classno].append(student['studentid'])
# {1: [1, 2], 2: [3, 4], 3: [5]}
uj5u.com熱心網友回復:
提供了兩個使用 groupby 的選項供參考
import pandas as pd
students = [
{'class': 1, 'studentid': 1},
{'class': 1, 'studentid': 2},
{'class': 2, 'studentid': 3},
{'class': 2, 'studentid': 4},
{'class': 3, 'studentid': 5}
]
# Solution1 pandas
df = pd.DataFrame(students)
classes = {item[0]: item[1]["studentid"].to_list() for item in df.groupby("class")}
print(classes)
# Solution2 itertools
import itertools
from operator import itemgetter
classes = dict((k, [item["studentid"] for item in g]) for k, g in itertools.groupby(students, key=itemgetter('class')))
print(classes)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/497560.html
