我想使用每個串列串列中元素的位置創建一個字典。每個嵌套串列的順序非常重要,必須保持不變。
原始嵌套串列和所需的字典鍵:
L_original = [[1, 1, 3], [2, 3, 8]]
keys = ["POS1", "POS2", "POS3"]
所需的字典創建自L_original:
L_dictionary = {"POS1": [1, 2], "POS2": [1, 3], "POS3": [3, 8]}
到目前為止,我的代碼未能滿足條件并在else每次迭代的陳述句上結束。
for i in L_original:
for key, value in enumerate(i):
if key == 0:
L_dictionary[keys[0]] = value
if key == 1:
L_dictionary[keys[1]] = value
if key == 2:
L_dictionary[keys[2]] = value
else:
print(f"Error in positional data processing...{key}: {value} in {i}")
uj5u.com熱心網友回復:
列舉時使用串列推導
L_dictionary = dict()
for i, k in enumerate(keys):
L_dictionary[k] = [x[i] for x in L_original]
或者干脆
L_dictionary = {k: [x[i] for x in L_original] for i, k in enumerate(keys)}
uj5u.com熱心網友回復:
我相信有更簡潔的方法可以使用一些花哨的 python API 來解決這個問題,但其中一個簡單的解決方案可能如下:
對于每個keyfromkeys我們從L_original的嵌套陣列中獲取與 has 具有相同索引的數字key,即idx
L_original = [[1, 1, 3], [2, 3, 8]]
keys = ["POS1", "POS2", "POS3"]
L_dictionary = {}
for (idx, key) in enumerate(keys):
L_dictionary[key] = []
for items in L_original:
L_dictionary[key].append(items[idx])
您的代碼轉到else,因為這與 selse有關if key == 2,而不是與 s 的整個鏈有關if。因此key,例如,如果 是,0則流程轉到else,因為0 != 2。if要解決此問題,應將第二個和后續s 替換為elif. 這與else整個鏈條有關:
if key == 0:
# only when key is 0
elif key == 1:
# only when key is 1
elif key == 2:
# only when key is 2
else:
# otherwise (not 0, not 1, not 2)
uj5u.com熱心網友回復:
L_original = [[1, 1, 3], [2, 3, 8]]
keys = ["POS1", "POS2", "POS3"]
b=[list(x) for x in zip(L_original[0], L_original[1])]
a={i:b[index] for index,i in enumerate(keys)}
首先,我剛剛通過將第一個嵌套串列的索引(參見 zip)壓縮到其他嵌套串列的相同索引來創建一個新串列。
b 的輸出:[[1, 2], [1, 3], [3, 8]]
然后使用索引創建字典keys:b串列索引。
a的輸出:{'POS1': [1, 2], 'POS2': [1, 3], 'POS3': [3, 8]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434461.html
下一篇:從聊天機器人中的字典中獲取回應
