从可能不存在键的Python字典中读取
我刚开始学习Python和数据解析。
我可以把外部的JSON数据拉取到一个Python字典里,然后遍历这个字典。
for r in results:
print r['key_name']
当我查看返回的结果时,如果某个键没有值(有些记录可能没有值),就会出现错误。如果我打印结果,它显示为
'key_name': None, 'next_key':.................
我的代码在出错的地方就停止了。有什么办法可以处理键没有值的情况吗?
任何帮助都非常感谢!
布洛克
8 个回答
如果可以的话,建议使用simplejson这个库来处理JSON数据。
在Python中,如果你想从字典中读取数据,但不确定某个键是否存在,有两种简单的方法。比如说:
dicty = {'A': 'hello', 'B': 'world'}
- 第一种是比较推荐的方式:
value = dicty.get('C', 'default value')
这里用的是`get`方法,它会尝试找到键'C'的值。如果找不到,就会返回你指定的默认值,比如这里的'default value'。
- 第二种方式就不太推荐了:
value = dicty['C'] if dicty['C'] else 'default value'
这种写法试图直接访问键'C',如果它存在且有值,就用它的值;如果没有值,就返回默认值。这种方式有点风险,因为如果键'C'根本不存在,程序会报错。
- 还有一种更糟糕的方式:
try:
value = dicty['C']
except KeyError as ke:
value = 'default value'
这种方法使用了`try`和`except`,它会尝试获取键'C'的值。如果找不到这个键,就会捕捉到错误,然后返回默认值。这种方式虽然能处理错误,但写起来比较麻烦,不够简洁。
当适用时,推荐的方式是:
for r in results:
print r.get('key_name')
如果 key_name
不是字典中的一个键,这段代码会简单地打印出 None
。你也可以设置一个不同的默认值,只需把它作为第二个参数传入:
for r in results:
print r.get('key_name', 'Missing: key_name')
如果你想做一些不同的事情,比如在键缺失时完全不打印,那么你需要稍微复杂一点的结构,也就是说,可以选择:
for r in results:
if 'key_name' in r:
print r['key_name']
或者
for r in results:
try: print r['key_name']
except KeyError: pass
第二种方式在键缺失的情况比较少见时可能会更快,但第一种方式对很多人来说看起来更自然。