如何将嵌套列表转换为 Python 中的字典列表?

How to convert a nested list into a list of a dictionary in Python?

我正在尝试转换下面的嵌套列表

input_list = [['a', [1, 2, 3]], ['b', [2, 4, 5]], ['c', [3, 7, 8]]]

进入字典列表如下。

output: [{"a":1, "b":2, "c":3}, {"a":2, "b":4, "c":7}, {"a":3, "b":5, "c":8}]

这是我尝试过的方法,但不确定如何将列表扩展为值并将它们分类到一个字典中。

My Code:
dict( (k[0], k[1:]) for k in l1)

我得到的输出为:

{'a': [[1, 2, 3]], 'b': [[2, 4, 5]], 'c': [[3, 7, 8]]}

我猜我需要使用 zip 或 map 等功能。我不确定。非常感谢任何解决方案。谢谢。

你可以试试这个:

[dict(pairs) for pairs in zip(*[[(a, v) for v in l ] 
                                for a, l in input_list])
]

输出:

[{'a': 1, 'b': 2, 'c': 3}, {'a': 2, 'b': 4, 'c': 7}, {'a': 3, 'b': 5, 'c': 8}]

你可以直接使用 zip 比如,

>>> x
[['a', [1, 2, 3]], ['b', [2, 4, 5]], ['c', [3, 7, 8]]]
>>> keys, values = zip(*x) # extract the keys and values
>>> keys
('a', 'b', 'c')
>>> values
([1, 2, 3], [2, 4, 5], [3, 7, 8])
>>>
>>> [dict(zip(keys, value)) for value in values]
[{'a': 1, 'b': 2, 'c': 3}, {'a': 2, 'b': 4, 'c': 5}, {'a': 3, 'b': 7, 'c': 8}]

您可以 zip 值的子列表将它们与键对齐,以便您可以将键和值压缩为 dict 构造函数的输入:

[dict(zip((k for k, _ in input_list), v)) for v in zip(*(v for _, v in input_list))]

如果您不想使用任何 list-/dict-comprehension 并且只使用 for 循环,那么您可以这样做:

input_list = [['a', [1, 2, 3]], ['b', [2, 4, 5]], ['c', [3, 7, 8]]]
newList = []
for key, values in input_list:
    for idx, value in enumerate(values):
        if len(newList) -1 < idx:
            newList.append({key: value})
        else:
            newList[idx].update({key:value})

for i in newList:
    print(i)

输出:

{'a': 1, 'b': 2, 'c': 3}
{'a': 2, 'b': 4, 'c': 7}
{'a': 3, 'b': 5, 'c': 8}

即使您的列表长度不同,此代码也能正常工作。

如果我们将 input_list 设置为:

input_list = [['a', [9, 7, 3, 2]], ['b', [4, 7, 8, 8, 2, 5]], ['c', [1, 2, 2]], ['d', [4, 4, 2, 1]], ['e', [6, 2]]]

那么输出将是:

{'a': 9, 'b': 4, 'c': 1, 'd': 4, 'e': 6}
{'a': 7, 'b': 7, 'c': 2, 'd': 4, 'e': 2}
{'a': 3, 'b': 8, 'c': 2, 'd': 2}
{'a': 2, 'b': 8, 'd': 1}
{'b': 2}
{'b': 5}