我是python的新手,正在学习有关嵌套列表和字典的知识。我目前正在做一项作业,需要将具有学生成绩的列表转换为成绩是整数的字典:
student_grades = [
['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['Jane', '100', '90', '80'],
['John', '88', '99', '111'],
['David', '45', '56', '67']
]
输出应如下所示:
{['Jane']:[100,90,80],['John']:[88,99,11],['David']:'45','56','67'] }
我不确定如何将多个嵌套列表转换成字典。欣赏是否有人可以指出我正确的方向。
答案 0 :(得分:1)
您的字典键不能为列表†。您可能需要字符串,而不是只包含一个元素的列表。
即'Jane'
而不是['Jane']
。
您可以使用字典理解;从第二个子列表开始迭代。我们还使用列表综合将等级转换为整数。
{name:[int(score) for score in scores] for name,*scores in student_grades[1:]}
给出:
{
"Jane": [
100,
90,
80
],
"John": [
88,
99,
111
],
"David": [
45,
56,
67
]
}
†之所以不能将列表作为字典的键,是因为它们不易散列。字典本质上是一个哈希表,用于将元素存储在与哈希相关的内存位置,以便您可以快速“查找”字典中的元素。但是,这仅在每个键可以被散列的情况下才有效,而列表不能这样做。为什么不能呢?因为哈希应考虑对象的所有组成元素,并且不应更改。但是,列表的元素可以更改,因为它是可变数据结构(与不可变的字符串或元组等相反),因此它不能可靠地计算相同的哈希,因此不能/不能实现该功能。
答案 1 :(得分:0)
#Convert digits in string to numbers.
student_grades_int = [[int(i) if i.isdigit() else i for i in myList] for myList in student_grades]
student_grades_int = student_grades_int[1:]
#Using list comprehensions to create the structure.
student_grades_final = {[x for x in myList if isinstance(x, str)][0]:[x for x in myList if isinstance(x, int)] for myList in student_grades_int}
student_grades_final
{'David': [45, 56, 67], 'Jane': [100, 90, 80], 'John': [88, 99, 111]}