有没有更简洁的方法来做到这一点?我正在检查嵌套字典中的特定键并将其分配给变量。我将很快用它来制作 mysql 插入。
我的主要问题是,如果 key 不存在(有时会发生),我不希望代码失败,我只想将变量发送为空。
此代码似乎有效,但我必须执行类似于大约 20 个不同键值的操作,因此我想确保我以最佳方式执行此操作
if 'Model' in ItemAttributes:
Model=ItemAttributes['Model']['value']
else:
Model=''
请您参考如下方法:
字典获取
这是一种解决方案:
Model = ItemAttributes.get('Model', {}).get('value', '')
如果 ItemAttributes 字典中不存在“Model”键,您将返回一个空字典,您可以在该字典上使用 dict.get('value', '')。如果“Model”键不存在,这当然会返回一个空字符串。
如果/否则
另一种解决方案是添加一个额外的函数调用,并让这个函数测试 key 是否存在。这里我们使用三元语句。这实际上就是您现在正在做的,但是将逻辑包装在一个函数中以便于重复访问:
def get_value(d, key1, key2):
return d[key1][key2] if key1 in d else ''
Model = get_value(ItemAttributes, 'Model', 'value')
捕获KeyError
更通用的解决方案是使用try/except 并捕获KeyError。如果缺少任何键,该函数将返回一个空字符串。否则,reduce + getitem 将循环遍历嵌套字典以访问给定键列表的适当值。
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'])
