Python-Flatting字典,其中某些键“缺失”

有没有更清洁的方法可以做到这一点?我正在检查嵌套字典中的特定键,并将其分配给变量。我将使用它在短时间内使mysql插入。


我的主要问题是,如果密钥不存在(有时会发生),我不希望代码失败,我只想将变量发送为空。


这段代码似乎可以正常工作,但是我必须做一些类似于20个不同键值的事情,所以我想确保自己以最佳方式进行操作


if 'Model' in  ItemAttributes:

    Model=ItemAttributes['Model']['value']

else:

    Model=''


慕斯709654
浏览 242回答 3
3回答

翻过高山走不出你

dict.get这是一种解决方案:Model = ItemAttributes.get('Model', {}).get('value', '')如果ItemAttributes词典中不存在“模型”键,则返回一个空的词典,并在该词典上使用dict.get('value', '')。当然,如果“模型”键不存在,这将返回一个空字符串。如果别的另一种解决方案是添加一个额外的函数调用,并对该函数进行测试以检查密钥是否存在。在这里,我们使用三元语句。这实际上是您现在正在执行的操作,但是将逻辑包装在一个函数中以方便重复访问: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。如果缺少任何键,该函数将返回一个空字符串。否则,在给定键列表的情况下,reduce+getitem将循环浏览嵌套字典以访问适当的值。from functools import reducefrom operator import getitemdef getFromDict(dataDict, mapList):    try:        return reduce(getitem, mapList, dataDict)    except KeyError:        return ''Model = getFromDict(ItemAttributes, ['Model', 'Value'])

慕森卡

model = ItemAttributes.get('Model', {}).get('value', '')不知道它是否更好,但是可以!:)

慕哥6287543

使用get通常是最好的解决方案。另一个解决方案是捕获KeyError异常:try:     Model=ItemAttributes['Model']['value']except KeyError:    Model=''模型将被设置为'',如果'Model'不是ItemAttributes或者'value'不ItemAttributes['Model']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python