Python 如何有效地迭代字典的值?
我正在使用字典运行学校作业匹配算法。算法的所有过程都相对高效,除了需要将结果导出到Python 如何有效地迭代字典的值?,python,pandas,dictionary,Python,Pandas,Dictionary,我正在使用字典运行学校作业匹配算法。算法的所有过程都相对高效,除了需要将结果导出到.csv的部分 students是一本包含483.070对键值的字典。键是一个带id的整数,值是我创建的学生类对象。实际上,要导出结果,我使用以下方法 def解析学生匹配信息(学生:学生)->int: 如果student.assigned_空缺为无: 返回0 返回student.assigned\u缺额.program\u id def get_分配_输出(学生:dict)->pd.DataFrame: 结果=pd
.csv
的部分
students
是一本包含483.070对键值的字典。键是一个带id的整数,值是我创建的学生类对象。实际上,要导出结果,我使用以下方法
def解析学生匹配信息(学生:学生)->int:
如果student.assigned_空缺为无:
返回0
返回student.assigned\u缺额.program\u id
def get_分配_输出(学生:dict)->pd.DataFrame:
结果=pd.DataFrame(列=['Student\u ID'、'Program\u ID'、'Grade\u ID'])
学生价值观():
程序id=解析学生匹配信息(学生)
result=result.append({'Student\u ID':Student.ID,'Program\u ID':Program\u ID,'Grade\u ID':Student.Grade},忽略\u index=True)
返回结果。对值进行排序('Grade\U ID')
制作这个
pd.DataFrame
花了一个多小时。欢迎任何建议 通常,您不希望附加到数据帧,而是从一个iterable创建它,更好的方法如下所示
def parse_student_match_information(student: Student) -> int:
if student.assigned_vacancy is None:
return 0
return student.assigned_vacancy.program_id
def get_assignation_output(students: dict) -> Iterable[dict]:
for student in students.values():
program_id = parse_student_match_information(student)
result = {'Student_ID': student.id, 'Program_ID': program_id, 'Grade_ID': student.grade}
yield result
def make_df(rows: Iterable[dict]) -> pd.DataFrame:
df = pd.DataFrame(rows, columns=['Student_ID', 'Program_ID', 'Grade_ID'])
df.sort_values(by=['Grade_ID'])
return df
通过这种方式,您可以一次从所有行创建数据帧,然后在最后对其进行排序,而不是每次迭代。您应该从中看到性能方面的改进。代码的每个部分花费了多少时间?在学生的迭代中,学生的解析、数据帧的附加和排序。确定哪一个花费的时间最长。如果您正在寻找改进工作代码的建议,那么这可能属于您。只是出于好奇,这将时间减少到了什么?从1小时减少到15-20秒!