如何解决为什么我的字典在dict理解构造函数中被删除?
我在另一种的dict理解构造中引用了一个protocol_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
解决方法
protocol_dict 需要在使用它的代码之前定义。
是在同一个文件中定义的,还是导入的?
如果它在同一文件中,则它必须在同一范围内,您可能正在定义 protocol_dict ,以使试图使用它的代码看不到它
dict理解没有什么神奇的,您可以通过运行以下代码段对其进行测试:
foo = dict(a=1,b=2)
print({x: foo[x] for x in "ab"})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。