使用嵌套for循环的理解创建字典

时间:2016-02-25 10:44:20

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

我有一个嵌套的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

1 个答案:

答案 0 :(得分: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对象用作密钥,而不仅仅是名称。