【问题标题】:How do you create a dictionary from nested lists in Python?如何从 Python 中的嵌套列表创建字典?
【发布时间】:2016-10-01 04:47:45
【问题描述】:

我希望可能有某种方法可以使用理解来执行此操作,但我说我有如下数据:

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

【问题讨论】:

    标签: python python-3.x dictionary-comprehension


    【解决方案1】:

    您可以在字典理解中使用 zip:

    {z[0]: list(z[1:3]) for z in zip(*data)}
    Out[16]: {'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
    

    工作原理:

    zip 将采用 transpose

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

    在 dict 理解中,您将第一个元素作为键,其余两个作为值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多