根据嵌套列表中元素的位置创建字典

Create dictionary from the position of elements in nested lists

我想使用每个列表列表中元素的位置创建一个字典。每个嵌套列表的顺序非常重要,必须保持不变。

原始嵌套列表和所需的字典键:

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}")

我相信有更简洁的方法来解决这个问题 python API,但其中一个直接的解决方案可能如下:

对于keys中的每个key,我们从L_original的嵌套数组中取出那些与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,因为此 elseif key == 2 相关,而不是 if 的整个链。因此,例如,如果 key0,则流程会转到 else,因为 0 != 2。要解决此问题,应将第二个和后续 if 替换为 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)

在枚举时使用列表理解

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

首先,我刚刚创建了一个新列表,方法是将第一个嵌套列表的索引压缩(see zip) 到其他嵌套列表的相同索引。

Output of b: [[1, 2], [1, 3], [3, 8]]

然后使用 keys 的索引创建字典:b 列表的索引。

Output of a: {'POS1': [1, 2], 'POS2': [1, 3], 'POS3': [3, 8]}