我有一个嵌套的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 :(得分: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
对象用作密钥,而不仅仅是名称。