簡體   English   中英

如何使用嵌套循環來創建我想要的字典?

[英]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作為變量名,因為這可能會導致問題,最好使用lstlist_類的名稱。

實際上,您只需將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.

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