python - 为什么我的 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
解决方案
protocol_dict需要在使用它的代码之前定义。
它是在同一个文件中定义的,还是导入的?
如果它在同一个文件中,那么它需要在同一个范围内,您可能正在定义protocol_dict以使其对尝试使用它的代码不可见。
dict理解没有什么神奇的,你可以通过运行这个片段来测试它:
foo = dict(a=1, b=2)
print({x: foo[x] for x in "ab"})
推荐阅读
- android - 使用自定义渲染器视图进行相机预览时如何在 Xamarin 表单上重新启动相机预览
- java - 如何使用 Java 8 改进条件逻辑
- javascript - 我可以根据对无法访问数据库的网站的依赖来创建数据库更改吗?
- git - 无法使用 pip 从其他人的存储库安装分支
- spring-integration - Spring Data Flow Kubernetes JDBC 驱动程序
- reactjs - 我正在尝试为我的小部件创建一个添加功能,但它没有按预期工作
- routing - 如何使用 Ionic 4 以编程方式导航
- javascript - 如何将一系列小时调整为首选时区?
- vuejs2 - Vuejs如果图像存在
- eclipse - 如何在 Eclipse 上的多个路径上导出 Jar 文件