python - 字典 KeyNotFound
问题描述
对于比我更有知识的人的快速问题 - 为什么第一行代码有效但第二行无效?在我看来,我正在以两种等效的方式做同样的事情,但是 {...} 方法会引发错误,而 dict([]) 方法不会:
print dict([(key,locals()[key]) for key in ["Type","NoPoints","PointNos","Zoff"]])
print {key:locals()[key] for key in ["Type","NoPoints","PointNos","Zoff"]}
输出:
{'Zoff': ['1', '1', '0', '0'], 'NoPoints': 4, 'Type': 'PANEL', 'PointNos': ['253', '254', '254', '253']}
Runtime error (KeyNotFoundException): Type
Traceback:
line 143, in AddArea, "<string>"
#EDIT - 我更正了key,locals()
(key:locals()
这是我在编辑器中所做的 - 为我在那里所做的糟糕的复制/粘贴工作道歉!)我的错误仍然存在
我还应该补充一点,我正在使用 Python 2.7 (IronPython)
解决方案
请参阅此相关问题的答案: Can't use locals() in list comprehension in Python 3?
列表推导在 Python 3 中有自己的本地范围(因此也有 locals() dict)
您可以通过这样的比较来验证它:
print(locals().keys())
print([locals().keys() for i in [1]][0])
字典理解也会发生同样的事情。
另外,您需要用 a:
而不是 a来分隔键和值,
来制作字典。
编辑:
虽然 Python 2 (IronPython) 中的列表理解似乎不会出现这个问题,但字典理解似乎就是这种情况:
print(locals().keys())
print([locals().keys() for i in [1]][0]) # list comprehension
print({"test":locals().keys() for i in [1]}) # dict comprehension
结果:
['__name__', '__file__', '__doc__', '__builtins__']
['__name__', '__file__', '__doc__', '__builtins__', 'i']
{'test': ['i']}
推荐阅读
- ios - iOS 在 Apple Silicon 上运行 - 打开文件的邮件未放置在“文档/收件箱”中
- python - 如何从单独的 DataFrame 中的匹配行值中提取列标题并基于它创建一个新列?
- java - System.in.read() 如何将字符转换为int
- sql - DateAdd 在计算查询字段中不起作用
- python - 在python中获取列表和嵌套列表之间的公共列表元素
- python - Python字符串字节到字节
- javascript - 为什么 React-Router 不显示链接?
- python - BadRequestKeyError:400 错误请求:浏览器(或代理)发送了此服务器无法理解的请求。键错误:“搜索”
- linux - 消除子壳以加快处理速度?
- python - 如何在 Python Notebook 中访问 Scala JDBC 连接 ---Databricks