【问题标题】:Create a dictionary using comprehension with nested for loops使用带有嵌套 for 循环的理解创建字典
【发布时间】:2016-06-08 02:12:39
【问题描述】:

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

【问题讨论】:

  • 你忘记了if
  • 如何你的失败了?有错误吗?
  • TypeError: unhashable type: 'ContractWithId'失败
  • 对,你也忘了.name属性。
  • each_contract.nameeach_contract 不同

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


【解决方案1】:

您忘记了.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 对象作为键,而不仅仅是名称。

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2019-03-29
    • 2019-09-30
    • 2017-03-09
    • 2021-06-03
    • 2022-01-03
    • 2021-12-03
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多