如果密钥可能不存在,则从Python dict读取

Bti*_*rt3 27 python json

我是Python和解析数据的新手.

我可以将外部JSON提要拉入Python字典并迭代字典.

for r in results:
     print r['key_name']
Run Code Online (Sandbox Code Playgroud)

当我浏览返回的结果时,当一个键没有值时,我会收到一个错误(记录的值可能并不总是存在).如果我打印结果,则显示为

'key_name': None, 'next_key':.................
Run Code Online (Sandbox Code Playgroud)

我的代码打破了错误.如何控制没有值的键?

任何帮助将不胜感激!

Ale*_*lli 76

适用时的首选方式:

for r in results:
     print r.get('key_name')
Run Code Online (Sandbox Code Playgroud)

None如果key_name不是字典中的键,这将简单地打印.您也可以使用不同的默认值,只需将其作为第二个参数传递:

for r in results:
     print r.get('key_name', 'Missing: key_name')
Run Code Online (Sandbox Code Playgroud)

如果你想做一些与使用默认值不同的东西(比如,当密钥不存在时完全跳过打印),那么你需要更多的结构,即:

for r in results:
    if 'key_name' in r:
        print r['key_name']
Run Code Online (Sandbox Code Playgroud)

要么

for r in results:
    try: print r['key_name']
    except KeyError: pass
Run Code Online (Sandbox Code Playgroud)

第二个可以更快(如果它比一个钥匙丢失的相当罕见),但第一个看起来对许多人来说更自然.

  • 说你有一个字典,{data:{'moredata':'value','evenmoredata':'anothervalue'}},.get适用于.get('data'),但是仍然可以访问.get('数据”)['moredata'] (2认同)
  • @brizz,你刚刚写的表达式很适合你给出的例子。对于更复杂的问题,我建议您单独提问,而不是试图在评论线程中劫持一个 5 岁的孩子!-) (2认同)

Aid*_*len 7

如果 key 可能不存在,有两种直接的方法可以从 Python dict 中读取数据。例如:

dicty = {'A': 'hello', 'B': 'world'}

  1. 访问键值对的 Python 方式是:

value = dicty.get('C', 'default value')

  1. 非Python方式:

value = dicty['C'] if dicty['C'] else 'default value'

  1. 更糟糕:

try: value = dicty['C'] except KeyError as ke: value = 'default value'