如何为嵌套字典内的列表元素程序化设置值?
程序化更新嵌套字典内的列表元素值
初始数据
初始字典:
{'Abraham': {'subjects': ['Chem', 'Bio', 'Phy', 'Math']}}
给定的评估类型与分数列表:
assess_type = ['Quiz', 'HW', 'ATTND', 'Exam'] chem = ['127', '135', '17', '46'] bio = ['154', '64', '14', '54'] phy = ['115', '115', '15', '55'] math = ['140', '160', '20', '40']
期望结果(修正语法错误后)
{'Abraham': {'subjects': { 'Chem': {'Quiz': '127', 'HW': '135', 'ATTND': '17', 'Exam': '46'}, 'Bio': {'Quiz': '154', 'HW': '64', 'ATTND': '14', 'Exam': '54'}, 'Phy': {'Quiz': '115', 'HW': '115', 'ATTND': '15', 'Exam': '55'}, 'Math': {'Quiz': '140', 'HW': '160', 'ATTND': '20', 'Exam': '40'} }}}
实现方法
核心思路是先建立科目与对应分数的映射,再通过遍历替换原列表中的科目名称为带分数的字典,具体代码如下:
# 初始字典 student_dict = {'Abraham': {'subjects': ['Chem', 'Bio', 'Phy', 'Math']}} # 评估类型与分数 assess_type = ['Quiz', 'HW', 'ATTND', 'Exam'] chem = ['127', '135', '17', '46'] bio = ['154', '64', '14', '54'] phy = ['115', '115', '15', '55'] math = ['140', '160', '20', '40'] # 建立科目到分数列表的映射 subject_score_map = { 'Chem': chem, 'Bio': bio, 'Phy': phy, 'Math': math } # 获取原科目列表并生成新的科目字典 original_subjects = student_dict['Abraham']['subjects'] updated_subjects = {} for subj in original_subjects: # 用zip将评估类型和分数配对成字典 score_detail = dict(zip(assess_type, subject_score_map[subj])) updated_subjects[subj] = score_detail # 更新回原字典 student_dict['Abraham']['subjects'] = updated_subjects # 查看结果 print(student_dict)
如果需要subjects保持为列表格式(每个元素是含单个键值对的字典),只需修改生成updated_subjects的部分:
updated_subjects = [] for subj in original_subjects: score_detail = dict(zip(assess_type, subject_score_map[subj])) updated_subjects.append({subj: score_detail})
这样输出的结构就会是列表形式的嵌套字典。
内容的提问来源于stack exchange,提问作者Owoeye Babatunde
相关产品推荐
相关产品推荐

