2016-11-04 79 views
0

下面的代码是从一个更大的一块位。线是2D列表,keyss是1D列表。行中的所有元素与keyss的长度相同。查询字典理解

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

我想知道是否有使用字典理解书写这种方法?这更像是一个奇怪的问题,因为所显示的代码对我正在做的事很好。我一直在尝试,也找不到方法。如果你可以阅读它的外观,谢谢!

编辑#1:

通过响应阅读,我意识到这是不是真的工作。我试图做一个列表理解,其中每个元素都是字典理解。我不完全确定这是否可行。我想制作一个字典列表,其中我将keyss中的每个元素和索引中的索引匹配到列表中的行中的元素,如果这样做合理的话。

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

+0

我想你已经混淆了名单和字典。你称之为'datadict'实际上是一个包含只有一个键的字典的列表。这是预期的结果还是你想构建一个大字典? –

回答

1

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

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

你可以找到关于语法here的文档。

0

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

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

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

dict(zip(keyss, elements)) 

或完成字典理解

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