亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以有效的方式迭代字典的值?

如何以有效的方式迭代字典的值?

萬千封印 2022-11-09 17:11:20
我正在使用字典運行學校作業匹配算法。該算法的所有過程都相對高效,除了我需要將結果導出到.csv.students是一個包含 483.070 對鍵值對的字典。鍵是一個帶有 id 的整數,值是我創建的 Student 類對象。實際上,要導出結果,我正在使用以下方法。def parse_student_match_information(student: Student) -> int:    if student.assigned_vacancy is None:        return 0    return student.assigned_vacancy.program_iddef get_assignation_output(students: dict)-> pd.DataFrame:    result = pd.DataFrame(columns = ['Student_ID', 'Program_ID', 'Grade_ID'])    for student in students.values():        program_id = parse_student_match_information(student)        result = result.append({'Student_ID': student.id, 'Program_ID': program_id, 'Grade_ID': student.grade}, ignore_index = True)    return result.sort_values('Grade_ID')制作這個花了一個多小時pd.DataFrame。歡迎任何建議!
查看完整描述

1 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

通常,您不想附加到 DataFrame 而是從可迭代對象中創建它,更好的方法如下所示。


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

這樣,您可以一次從所有行創建 DataFrame,然后在最后對它進行一次排序,而不是每次迭代。您應該會從中看到性能方面的改進。


查看完整回答
反對 回復 2022-11-09
  • 1 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號