首页 > 解决方案 > 为什么我的 dict 在 dict 理解构造函数中被删除?

问题描述

我在protocol_dict另一个 dict 理解结构中引用一个 dict, :

    for drug_id in drug_dict.keys():
        drug_name = Drugs.get_drug_name_from_id(drug_id)
        
        # Error happens here:
        frontend_forward_dict[drug_name] = {pid: protocol_dict[pid] for pid in drug_dict[drug_id]}

当我运行此代码时,我收到protocol_dict未定义的错误消息。然而很明显,而且,当我调试我的代码时,我可以验证 python 是否有一个存储值,protocol_dict直到它运行 dict 理解。但是dict理解在第一次被调用时抛出了这个错误。

当我用 for 构造函数替换 dict 理解时,问题消失了,一切都按预期工作:

    for drug_id in drug_dict.keys():
        drug_name = Drugs.get_drug_name_from_id(drug_id)
        target_dict = {}
        for pid in drug_dict[drug_id]:
            target_dict[pid] = protocol_dict[pid]
        frontend_forward_dict[drug_name] = target_dict

有谁知道这里发生了什么?如果它有用,这里是 的定义protocol_dict

protocol_dict = {}
    for p, val in protocol_data.items():
        versions = []
        if len(val) == 1:
            if "VERSION NUMBER" in val[0]["metadata"].keys():
                vers = val[0]["metadata"]["VERSION NUMBER"]
                versions.append(vers)
            else:
                versions.append("-1")
        else:
            # Multiple versions. Can assume each one comes with the right tag.
            for version in val:
                vers = version["metadata"]["VERSION NUMBER"]
                versions.append(vers)
        protocol_dict[p] = versions

标签: pythondictionary

解决方案


protocol_dict需要在使用它的代码之前定义。

它是在同一个文件中定义的,还是导入的?

如果它在同一个文件中,那么它需要在同一个范围内,您可能正在定义protocol_dict以使其对尝试使用它的代码不可见。

dict理解没有什么神奇的,你可以通过运行这个片段来测试它:

foo = dict(a=1, b=2)
print({x: foo[x] for x in "ab"})

推荐阅读