我想创建一个字典,以列表作为键,并以列表作为我的值。
我在下面尝试了以下代码,但它仅使用了成绩列表的最后3个值。我被困在如何指定列表列表以正确遍历每个名称的问题上。
grades = [[100, 90, 80], [88, 99, 111], [45, 56, 67], [59, 61, 67], [73, 79, 83], [89, 97, 101]]
names = ['Jerry', 'Terry', 'Larry', 'Harry', 'Mary', 'Carry']
test3 = {k:row for row in grades2 for k in names}
print(test3)
Out: {'Jerry': [89, 97, 101], 'Terry': [89, 97, 101], 'Larry': [89, 97, 101], 'Harry': [89, 97, 101], 'Mary': [89, 97, 101], 'Carry': [89, 97, 101]}
我的预期结果将是{name:[list of grades],name:[list of grades]...
答案 0 :(得分:2)
data = {name:grade for name, grade in zip(names, grades)}
答案 1 :(得分:2)
您可以使用zip
来并行地迭代名称和等级,然后将其传递给dict
构造函数,该构造函数除其他外可以使键和值的迭代成为字典。 / p>
test3 = dict(zip(names, grades))
答案 2 :(得分:1)
当您要并行迭代names
和grades
列表时,您正在使用嵌套循环(产生names
和grades
的笛卡尔积),您可以使用zip
:
test3 = {k : row for k, row in zip(names, grades)}
print(test3)
输出:
{'Jerry': [100, 90, 80], 'Terry': [88, 99, 111], 'Larry': [45, 56, 67], 'Harry': [59, 61, 67], 'Mary': [73, 79, 83], 'Carry': [89, 97, 101]}
答案 3 :(得分:1)
无需循环!
test3 = dict(zip(names, [x for x in grades]))
Out: {'Jerry': [100, 90, 80],
'Terry': [88, 99, 111],
'Larry': [45, 56, 67],
'Harry': [59, 61, 67],
'Mary': [73, 79, 83],
'Carry': [89, 97, 101]}