2016-11-04 80 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)}