2016-02-25 83 views
1

我有一個嵌套for循環,我在其中設置了我的新字典的鍵值。在瞭解了列表解析之後,我想知道是否可以對字典使用相同的邏輯。使用嵌套for循環的理解創建字典

我試圖在一行修真詞典目前失敗:

dict_contract_name_id = {each_contract: each_contract.id for each_inuring_layer in context.program_obj.inuringLayers for each_contract in each_inuring_layer.contracts} 

它無法說TypeError: unhashable type: 'ContractWithId'

我想轉換成一行理解實際代碼:

dict_contract_name_id = {} 
for each_inuring_layer in context.program_obj.inuringLayers: 
    for each_contract in each_inuring_layer.contracts: 
     if each_contract.name in contracts: 
      dict_contract_name_id[each_contract.name] = each_contract.id 
+0

你忘了'如果'。 –

+0

*您的*失敗了嗎?有錯誤嗎? –

+0

說'TypeError:不可用類型:'ContractWithId'' – user4659009

回答

2

你忘了.name屬性,還有if過濾器:

dict_contract_name_id = { 
    each_contract.name: each_contract.id 
    for each_inuring_layer in context.program_obj.inuringLayers 
    for each_contract in each_inuring_layer.contracts 
    if each_contract.name in contracts} 

您嘗試使用each_contract對象作爲一個關鍵,而不僅僅是名稱。