python - 在转换为元组时创建嵌套字典
问题描述
我是 Python 新手(我已经学习了大约一周,但我知道 R)。
我正在尝试创建一个嵌套字典,将学生的姓名映射到包含他们分数的字典。此分数字典的每个条目都应键入作业名称并将相应的成绩保存为整数。例如,grade_dicts['Thorny']['Exam 1'] == 100
我很接近,但是 def Convert 函数中有些东西我做的不对,我想知道你是否可以提供一些帮助。我读过有关嵌套字典的内容:https ://www.geeksforgeeks.org/python-nested-dictionary/但考虑到它来自元组的方式,这个问题似乎根本不同。
非常感谢!
grades = [
# First line is descriptive header. Subsequent lines hold data
['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['Thorny', '100', '90', '80'],
['Mac', '88', '99', '111'],
['Farva', '45', '56', '67'],
['Rabbit', '59', '61', '67'],
['Ursula', '73', '79', '83'],
['Foster', '89', '97', '101']
]
def assign(grades):
assignments = []
for i in grades[:]:
assignments.extend(i[:]) #play around with this! #ended up using extend
return(assignments)
assignments = assign(grades)
assignments = list(zip(*[iter(assignments)]*4))
assignments = assignments[1:7]
def Convert(tup, di):
for a, b,c,d in tup:
di.setdefault(a, [])
di.setdefault(b, ['Exam 1'])
di.setdefault(c, ['Exam 2'])
di.setdefault(d, ['Exam 3'])
return di
dictionary = {}
grade_lists = Convert(assignments, dictionary)
grade_lists
解决方案
您可以进行嵌套字典理解来构建输出,首先将初始数据转换为更简单的格式,例如:
grades = [
# First line is descriptive header. Subsequent lines hold data
['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['Thorny', '100', '90', '80'],
['Mac', '88', '99', '111'],
['Farva', '45', '56', '67'],
['Rabbit', '59', '61', '67'],
['Ursula', '73', '79', '83'],
['Foster', '89', '97', '101']
]
exams = grades[0][1:]
names = [data[0] for data in grades[1:]]
list_of_values = [data[1:] for data in grades[1:]]
output = {
name: { exam: value for exam,value in zip(exams, values) } for name,values in zip(names, list_of_values)
}
print(output)
>>> {'Thorny': {'Exam 1': '100', 'Exam 2': '90', 'Exam 3': '80'}, 'Mac': {'Exam 1': '88', 'Exam 2': '99', 'Exam 3': '111'}, 'Farva': {'Exam 1': '45', 'Exam 2': '56', 'Exam 3': '67'}, 'Rabbit': {'Exam 1': '59', 'Exam 2': '61', 'Exam 3': '67'}, 'Ursula': {'Exam 1': '73', 'Exam 2': '79', 'Exam 3': '83'}, 'Foster': {'Exam 1': '89', 'Exam 2': '97', 'Exam 3': '101'}}
# example
print(output['Ursula']['Exam 1'])
>>> 73
推荐阅读
- typescript - 我可以从 Lambda 层导入 typescript 类型吗?
- python - 如何解码这个字符串?-> b'Katastr\\xc3\\xa1ln\\xc3\\xad mapa'
- c - "MODULE_INFO(retpoline, "Y")" 宏是什么?
- android - Activity 中带有 setOnClickListener 的 MyAdapter 确实有效,但在 Fragment 中无效
- c# - 使用空数据表序列化 DataSet 会丢失所有列信息
- matlab - MATLAB glmnet 中的逻辑回归参数有什么问题?
- c++ - Qt Quick 2:创建和添加共享库
- r - 是否有 R 函数来转换数据框
- sql - 将数字数据类型划分为不同的缩放数字类型
- java - 从 Git Source 文件夹获取 jar 文件