如何从 Python 中的嵌套列表创建字典?
How do you create a dictionary from nested lists in Python?
我希望可能有某种方式可以使用理解来做到这一点,但假设我有这样的数据:
data = [['a', 'b', 'c'], [1, 2, 3], [4, 5, 6]]
我的最终目标是创建一个字典,其中第一个嵌套列表包含键,其余列表包含值:
{'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
我已经尝试过类似这样的方法让我很接近,但是正如你所知道的,我在将列表附加到字典值中时遇到了问题,这段代码只是覆盖:
d = {data[0][c]: [] + [col] for r, row in enumerate(data) for c, col in enumerate(row)}
>>> d
{'c': [6], 'a': [4], 'b': [5]}
您可以在字典理解中使用 zip:
{z[0]: list(z[1:3]) for z in zip(*data)}
Out[16]: {'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
工作原理:
zip 将采用 转置:
list(zip(['a', 'b', 'c'], [1, 2, 3], [4, 5, 6]))
Out[19]: [('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]
但是,您的数据是列表的列表,因此为了确保 Python 看不到单个列表而是看到三个单独的列表,您需要 zip(*data)
而不是 zip(data)
。关于*
的使用有几个帖子:(1), (2), (3).
list(zip(*data))
Out[13]: [('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]
在字典理解中,您将第一个元素作为键,将其余两个元素作为值。
我希望可能有某种方式可以使用理解来做到这一点,但假设我有这样的数据:
data = [['a', 'b', 'c'], [1, 2, 3], [4, 5, 6]]
我的最终目标是创建一个字典,其中第一个嵌套列表包含键,其余列表包含值:
{'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
我已经尝试过类似这样的方法让我很接近,但是正如你所知道的,我在将列表附加到字典值中时遇到了问题,这段代码只是覆盖:
d = {data[0][c]: [] + [col] for r, row in enumerate(data) for c, col in enumerate(row)}
>>> d
{'c': [6], 'a': [4], 'b': [5]}
您可以在字典理解中使用 zip:
{z[0]: list(z[1:3]) for z in zip(*data)}
Out[16]: {'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
工作原理:
zip 将采用 转置:
list(zip(['a', 'b', 'c'], [1, 2, 3], [4, 5, 6]))
Out[19]: [('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]
但是,您的数据是列表的列表,因此为了确保 Python 看不到单个列表而是看到三个单独的列表,您需要 zip(*data)
而不是 zip(data)
。关于*
的使用有几个帖子:(1), (2), (3).
list(zip(*data))
Out[13]: [('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]
在字典理解中,您将第一个元素作为键,将其余两个元素作为值。