3 回答

TA貢獻1875條經驗 獲得超3個贊
dict.get
這是一種解決方案:
Model = ItemAttributes.get('Model', {}).get('value', '')
如果ItemAttributes詞典中不存在“模型”鍵,則返回一個空的詞典,并在該詞典上使用dict.get('value', '')。當然,如果“模型”鍵不存在,這將返回一個空字符串。
如果別的
另一種解決方案是添加一個額外的函數(shù)調用,并對該函數(shù)進行測試以檢查密鑰是否存在。在這里,我們使用三元語句。這實際上是您現(xiàn)在正在執(zhí)行的操作,但是將邏輯包裝在一個函數(shù)中以方便重復訪問:
def get_value(d, key1, key2):
return d[key1][key2] if key1 in d else ''
Model = get_value(ItemAttributes, 'Model', 'value')
捕捉KeyError
一個更通用的解決方案是使用try/except和catch KeyError。如果缺少任何鍵,該函數(shù)將返回一個空字符串。否則,在給定鍵列表的情況下,reduce+getitem將循環(huán)瀏覽嵌套字典以訪問適當?shù)闹怠?/p>
from functools import reduce
from operator import getitem
def getFromDict(dataDict, mapList):
try:
return reduce(getitem, mapList, dataDict)
except KeyError:
return ''
Model = getFromDict(ItemAttributes, ['Model', 'Value'])

TA貢獻1831條經驗 獲得超10個贊
使用get通常是最好的解決方案。另一個解決方案是捕獲KeyError異常:
try:
Model=ItemAttributes['Model']['value']
except KeyError:
Model=''
模型將被設置為'',如果'Model'不是ItemAttributes或者'value'不ItemAttributes['Model']
添加回答
舉報