【问题标题】:Inquiry on dictionary comprehension查字典理解
【发布时间】:2016-11-04 08:52:51
【问题描述】:

下面的代码有点来自一个更大的部分。 lines 是一个 2D 列表,而 keyss 是一个 1D 列表。行中的所有元素的长度与键的长度相同。

datadict = []
for element in lines:
    for index in range(len(element)):
        datadict.append({keyss[index]: element[index]})

我想知道是否有一种方法可以使用字典理解来编写这个?这更像是一个奇怪的问题,因为显示的代码非常适合我正在做的事情。我一直在尝试,也找不到方法。如果你能复习一下它的语法,谢谢!

编辑#1:

阅读回复后,我意识到它并没有真正起作用。我正在尝试做一个列表理解,其中每个元素都是字典理解。我不完全确定这是否可能。我想制作一个字典列表,在其中获取键中的每个元素并匹配索引以匹配列表中的元素中的索引,如果这有意义的话。

编辑#2: 我找到data_list = [{keyss[i]:row[i] for i in range(len(keyss))} for row in lines] 工作。

【问题讨论】:

  • 我认为您混淆了列表和字典。你所谓的datadict 实际上是一个包含只有一个键的字典的列表。这是预期的结果还是您想构建一个大字典?

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


【解决方案1】:

字典推导式创建字典。你想要一个 list 理解:

datalist = [{keyss[index]:element[index]}) for element in lines
            for index in range(len(element))]

您可以找到有关 here 语法的文档。

【讨论】:

    【解决方案2】:

    您当前的代码不会创建字典,但如果这是您的意图,则可以通过

    dict(zip(keyss, elements))
    

    或字典理解

    {key: value for key, value in zip(keyss, elements)}
    

    【讨论】:

      【解决方案3】:

      正如 eugene 所提到的,它将是 列表理解 而不是 dict 理解。您可以使用zip() 进一步简化代码,因为您需要与相同索引对应的来自elementkeyss 列表。因此,您简化的 列表理解 表达式应为:

      datalist = [{k: e} for elements in lines for e, k in zip(elements, keyss)]
      

      【讨论】:

        猜你喜欢
        • 2021-07-24
        • 2016-09-03
        • 1970-01-01
        • 2016-03-14
        • 2019-11-26
        • 1970-01-01
        • 2013-01-08
        • 2015-11-08
        • 1970-01-01
        相关资源
        最近更新 更多