簡體   English   中英

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

[英]How to create a dictionary with a list of list?

我想創建一個字典,其中一個列表作為鍵,而一個列表作為我的值。

我在下面嘗試了以下代碼,但它只使用了成績列表的最后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]...

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

您可以使用zip並行地迭代名稱和等級,然后將其傳遞給dict構造函數,該構造函數可以使鍵和值的迭代成為字典。

test3 = dict(zip(names, grades))

當您應該並行迭代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]}

無需循環!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM