关于词典理解的探究

时间:2016-11-04 08:52:52

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

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

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

我想知道是否有一种使用字典理解来写这个的方法?这更像是一个奇怪的问题,因为所显示的代码对于我正在做的事情来说效果很好。我一直在努力,也无法找到方法。如果你可以查看它看起来有点像这样的语法,谢谢!

编辑#1:

通过阅读回复,我意识到它并没有真正发挥作用。我试图做一个列表理解,其中每个元素都是字典理解。我不完全确定这是否可能。我想创建一个字典列表,其中我获取keyss中的每个元素,并匹配一行中列表中元素的索引,如果这是有意义的话。

编辑#2:编辑#2: 我发现data_list = [{keyss[i]:row[i] for i in range(len(keyss))} for row in lines]可以正常工作。

3 个答案:

答案 0 :(得分:1)

字典理解创建字典。你想要一个列表理解:

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

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

答案 1 :(得分:1)

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

完成
dict(zip(keyss, elements))

或词典理解

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

答案 2 :(得分:0)

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

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