如何用列表列表创建字典?

时间:2019-09-01 22:23:38

标签: python list dictionary

我想创建一个字典,以列表作为键,并以列表作为我的值。

我在下面尝试了以下代码,但它仅使用了成绩列表的最后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]...

4 个答案:

答案 0 :(得分:2)

data = {name:grade for name, grade in zip(names, grades)}

答案 1 :(得分:2)

您可以使用zip来并行地迭代名称和等级,然后将其传递给dict构造函数,该构造函数除其他外可以使键和值的迭代成为字典。 / p>

test3 = dict(zip(names, grades))

答案 2 :(得分:1)

当您要并行迭代namesgrades列表时,您正在使用嵌套循环(产生namesgrades的笛卡尔积),您可以使用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]}