[英]How can I use nested loop to create the dictionary I want?
我想創建一個像這樣的字典:
{0: {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
1: {0: 6, 1: 7, 2: 8, 3: 9, 4: 10},
2: {0: 11, 1: 12, 2: 13, 3: 14, 4: 15},
3: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20}}
這是我的代碼:
list=[[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20]]
dic={}
dic2={}
for i in range(len(list)):
for x in range(len(list[i])):
dic[x] = list[i][x]
dic2[i]=dic
print(dic2)
結果是:
{0: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20},
1: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20},
2: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20},
3: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20}}
我在哪里犯錯了? 我該如何解決?
另一種方法是:
dic = {
lst_ind: {i_ind: i for i_ind, i in enumerate(lst)}
for lst_ind, lst in enumerate(list)
}
順便說一句,我會避免使用 python 內置函數的名稱,例如list
作為變量名,因為這可能會導致問題,最好使用lst
或list_
類的名稱。
實際上,您只需將dic2[i]=dic
移到第二個循環之外
list=[[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20]]
dic2={}
for i in range(len(list)):
dic={}
for x in range(len(list[i])):
dic[x] = list[i][x]
dic2[i]=dic
print(dic2)
嘗試:
f, s = 4,5
dct = {}
for i in range(f):
dct[i] = {j : i*s+(j+1) for j in range(s)}
print(dct)
# As one-line
# dct = {i : {j : i*s+(j+1) for j in range(s)} for i in range(f)}
{0: {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
1: {0: 6, 1: 7, 2: 8, 3: 9, 4: 10},
2: {0: 11, 1: 12, 2: 13, 3: 14, 4: 15},
3: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20}}
嘗試:
list=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
dict2={}
for i in range(len(list)):
dic={}
for x in range(len(list[i])):
dic[x]=list[i][x]
dic2[i]=dic
print(dic2)
您無需使用 2 個字典,可以使用單個字典本身來解決。 希望這可以幫助。
dic = {}
for i in range(len(list)):
dic[i] = { j: l[i][j] for j in range(len(list[i]))}
print(dic)
上述代碼的輸出是
{0: {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
1: {0: 6, 1: 7, 2: 8, 3: 9, 4: 10},
2: {0: 11, 1: 12, 2: 13, 3: 14, 4: 15},
3: {0: 16, 1: 17, 2: 18, 3: 19, 4: 20}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.