我想用 dict 理解創建一個 dict,其中self.students[i]有一些名字,j應該是 0,2,4,6,8。
現在x回傳
{'Patricia': 6, 'Roger': 6, 'Samantha': 6, 'Xander': 6}
我希望它回傳的是
{'Patricia': 0, 'Roger': 2, 'Samantha': 4, 'Xander': 6}`
這是代碼
x = {self.students[i] : j for i in range(0,len(self.students)) for j in range(0,len(self.students) 3, 2)}
uj5u.com熱心網友回復:
使用enumerate:
x = {student : i * 2 for i, student in enumerate(self.students)}
uj5u.com熱心網友回復:
range回圈串列時不需要使用,只需回圈串列本身即可。此外,您不需要使用第二個回圈 for j,您可以根據串列中的索引計算您的數字。
要在回圈時獲取索引,您可以使用enumerate.
x = {student:i*2 for i,student in enumerate(self.students)}
uj5u.com熱心網友回復:
zip使用串列的范圍來獲取值對,而不是使用嵌套for回圈(它在整個 dict 中依次覆寫每個值,只留下 的最后一個值j):
>>> students = ['Patricia', 'Roger', 'Samantha', 'Xander']
>>> {s: j for s, j in zip(students, range(0, len(students) * 2, 2))}
{'Patricia': 0, 'Roger': 2, 'Samantha': 4, 'Xander': 6}
uj5u.com熱心網友回復:
您可以使用 zip 從其鍵結合偶數計數器(來自 itertools)構建字典:
x = dict(zip(self.students,itertools.count(0,2)))
uj5u.com熱心網友回復:
這有效
students = ['Ivan', 'Masha', 'Sasha']
students_dict = {i: k*2 for k, i in enumerate(students)}
print(students_dict)
你正在做的是回圈兩次。這用于制作二維串列。要更好地理解您的舊代碼,請參閱此處
uj5u.com熱心網友回復:
您當前的代碼每次都會遍歷每個學生。
因此,在最后一個回圈中,當 時j = 6,所有值都更改為6。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387577.html
上一篇:為什么我不能使用字典來改變矩陣?
