我一直試圖弄清楚,當涉及到從dict中獲取價值時,如何KISS。
有各種情況,例如:
- 鍵不存在(應該回傳默認的{}/[]/"")
- 鍵包含一個空串列的值(那么應該回傳空串列)
- 如果我們試圖抓取一個值,例如
test['objects'][0]['productInfo'][0]['michPrice']['promoExclusions'][0],如果它在productInfo處已經失敗,它應該立即回傳默認值而不是繼續搜索下一個鍵 。
我最終做了這樣的事情:
test = {
'pages': {
'prev': '',
},
'objects': [
{
'id': 'c362b8f3-1862-4e2d-ba06-d910e0d98e7e',
'productInfo': [
{
' merchProduct': {
'id': '63912b18-f00f-543f-a5c5-0c6236f63e79',
'snapshotId': '43cf801e-3689-42c2-ac85-d404e69aba42',
},
' merchPrice': {
'id': '7dd81061-d933-57f6-b233-2a6418ce487d',
'snapshotId': '268cc5af-8e04-4d64-b19b-02c2770b91fb',
'discounted': False,
#Could be | 'promoExclusions': ['TRUE'],
'promoExclusions'/span>: [],
' resourceType': ' merchPrice',
}
}
]
}
]
}
if test_print : = test['objects'][0]['productInfo'] [0][' merchPrice']['promoExclusions'][0] 。
print(test_print)
然而,這將回傳一個錯誤IndexError: list index out of range,由于串列不包含任何值,這是有意義的,但我想知道在這種情況下,我如何為這個粒子問題設定一個默認值。
我的問題是: 我怎樣才能在不需要使用大量資源的情況下,盡可能簡單有效地找到并獲得一個dict的值,如果沒有找到,則回傳一個默認值?
uj5u.com熱心網友回復:
對于一個單一的dict,你可以使用d.get('key', default),但對于一串嵌套的提取,沒有簡單的快捷方式。你可以用try/except
try。
test_print = test['objects'][0]['productInfo'] [0][' merchPrice']['promoExclusions'] [0]
except KeyError:
test_print = default_value
print(test_print)
uj5u.com熱心網友回復:
你是否嘗試過使用try except?
下面的代碼段會列印出你試圖訪問的字典的值,或者在出現例外的情況下列印出默認值。
default = 'default {}/[]/""
try。
print(test['objects'][0]['productInfo'] number">0][' merchPrice']['promoExclusions'][0] )
except(KeyError, IndexError)。
print(default)
uj5u.com熱心網友回復:
我怎樣才能在不需要使用大量資源的情況下,盡可能簡單而有效地找到并獲得一個dict的值,如果沒有找到,則回傳一個默認值?
這個問題的答案是使用 collections.defaultdict:
>>> import collection
>>> d = collections.defaultdict(list, {'key1'/span>: [1], 'key2': [2]})
>>> d['key1']
[1]
>>> d['key3']。
[]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/323172.html
標籤:
