将嵌套列表转换成字典

时间:2019-01-19 23:02:41

标签: python-3.x list dictionary nested

我是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'] }

我不确定如何将多个嵌套列表转换成字典。欣赏是否有人可以指出我正确的方向。

2 个答案:

答案 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]}