python - 捕获 `KeyError` 并替换为 MSG
问题描述
我正在查询一个JSON
没有可用键的字典。
我的目标是输入发生在然后写入文件中N/A
的密钥。KeyError
goal = ['name', 'age', 'gender']
for item in r['data']:
final = [item[x] for x in goal]
writer.writerow(final)
我知道可以通过Try/Except
但我不知道如何正确处理它
try:
final = [item[x] for x in goal]
except KeyError as e:
# from here am struggling
例子:
g = [
{'name': 'ahmed', 'age': '10', 'gender': 'M'},
{'name': 'mohamed', 'age': '20'},
{'name': 'ramy'}
]
期望的输出:
['ahmed', '10', 'M']
['moahmed','20','N/A']
['ramy','N/A','N/A']
解决方案
尝试dict.get
使用列表理解的另一种方式:
g = [
{'name': 'ahmed', 'age': '10', 'gender': 'M'},
{'name': 'mohamed', 'age': '20'},
{'name': 'ramy'}
]
goal = ['name', 'age', 'gender']
print([[d.get(k, "N/A") for k in goal] for d in g]) # when python couldn't find the key, return "N/A"
# [['ahmed', '10', 'M'], ['mohamed', '20', 'N/A'], ['ramy', 'N/A', 'N/A']]
推荐阅读
- angular - 简单的 Angular 2 Plunker 不工作
- javascript - R shinydashboard - 根据用户输入显示/隐藏多个菜单项
- c# - NI LabVIEW中的AES加密
- php - 无法通过使用标头功能重定向访问其他页面上的会话?
- post - _this.testFormEl.nativeElement.submit 不是 Form Post 的函数
- serialization - 协议缓冲区的长度前缀帧示例
- branch - git 命令检查存储库是否有任何未提交的更改
- c++ - arm-none-eabi-g++ 无法使用 -flto 正确处理弱别名
- django - 在日期时间字段上使用 __range 进行过滤
- python - 统计每个用户的词频