我是Python和解析数据的新手。
我可以将外部JSON提要拉入Python字典并迭代字典。
for r in results:
print r['key_name']
当我浏览返回的结果时,如果某个键没有值,则会收到错误(记录的值可能并不总是存在)。如果我打印结果,它显示为
'key_name': None, 'next_key':.................
我的代码打破了错误。如何控制没有值的键?
任何帮助将不胜感激!
布洛克
答案 0 :(得分:74)
首选方式,如果适用:
for r in results:
print r.get('key_name')
如果None
不是字典中的键,则只会打印key_name
。您也可以使用不同的默认值,只需将其作为第二个参数传递:
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
第二个可以更快(如果它比缺少的钥匙少得多),但第一个似乎对许多人来说更自然。
答案 1 :(得分:1)
如果可能,请使用simplejson库来管理JSON数据。
答案 2 :(得分:1)
如果密钥可能不存在,有两种直接从Python dict读取的方法。例如:
dicty = {'A': 'hello', 'B': 'world'}
value = dicty.get('C', 'default value')
value = dicty['C'] if dicty['C'] else 'default value'
try:
value = dicty['C']
except KeyError as ke:
value = 'default value'
答案 3 :(得分:1)
该线程中的最初问题是为什么我编写了Dictor库,它可以优雅地处理JSON回退和None值,而无需try / except或If块。
还为您提供了其他选项,例如忽略大写/小写
看到,
答案 4 :(得分:0)
使用has_key(),这将返回true或false
答案 5 :(得分:0)
[更新以消除粗心错误]
您也可以这样做:
for r in (row for row in results if 'a' in row):
print r['a']
这使用生成器表达式从“结果”中选择“行”,其中“行”包括键“a”。
这是一个小测试脚本:
results = [{'a':True}, {'b':True}, {'a':True}]
for r in (row for row in results if 'a' in row): print r['a']
答案 6 :(得分:0)
您可以使用内置函数hasattr
key='key_name'
# or loop your keys
if hasattr(e, key):
print(e[key])
else:
print('No key for %s' % key)