簡體   English   中英

如果密鑰可能不存在,則從Python dict讀取

[英]Reading from Python dict if key might not be present

我是Python和解析數據的新手。

我可以將外部JSON提要拉入Python字典並迭代字典。

for r in results:
     print r['key_name']

當我瀏覽返回的結果時,當一個鍵沒有值時,我會收到一個錯誤(記錄的值可能並不總是存在)。 如果我打印結果,則顯示為

'key_name': None, 'next_key':.................

我的代碼打破了錯誤。 如何控制沒有值的鍵?

任何幫助將不勝感激!

適用時的首選方式:

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

第二個可以更快(如果它比一個鑰匙丟失的相當罕見),但第一個看起來對許多人來說更自然。

如果可能,使用simplejson庫來管理JSON數據。

如果密鑰可能不存在,有兩種直接從Python字典中讀取的方法。 例如:

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

  1. 訪問鍵值對的pythonic方法是:

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

  1. 非pythonic方式:

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

  1. 更糟:

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

使用has_key(),這將返回true或false

[更新以消除粗心錯誤]

你也可以這樣做:

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']

您可以使用內置函數hasattr

key='key_name'
# or loop your keys 

if hasattr(e, key):
  print(e[key])
else:
  print('No key for %s' % key)

這個線程中的最初問題是我編寫Dictor庫的原因,它可以優雅地處理JSON回退和None值,而無需try / except或If塊。

還為您提供其他選項,如忽略大寫/小寫,

看到,

https://github.com/perfecto25/dictor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM