[英]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'}
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'
使用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塊。
還為您提供其他選項,如忽略大寫/小寫,
看到,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.