首页 > 解决方案 > Python - 一些键“丢失”的扁平字典

问题描述

有没有更清洁的方法来做到这一点?我正在检查嵌套字典中的特定键并将其分配给变量。我很快就会用它来做一个 mysql 插入。

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

这段代码似乎可以工作,但我必须做一些类似于大约 20 个不同键值的事情,所以我想确保我以最好的方式做到这一点

if 'Model' in  ItemAttributes:
    Model=ItemAttributes['Model']['value']
else:
    Model=''

标签: pythondictionary

解决方案


dict.get

这是一种解决方案:

Model = ItemAttributes.get('Model', {}).get('value', '')

如果字典中不存在“模型”键,则ItemAttributes返回一个空字典,在其上使用dict.get('value', ''). 如果“Model”键不存在,这当然会返回一个空字符串。

如果别的

另一种解决方案是添加一个额外的函数调用,并让这个函数测试密钥是否存在。这里我们使用三元语句。这实际上就是您现在正在做的事情,但是将逻辑包装在一个函数中以便于重复访问:

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 reduce
from operator import getitem

def getFromDict(dataDict, mapList):
    try:
        return reduce(getitem, mapList, dataDict)
    except KeyError:
        return ''

Model = getFromDict(ItemAttributes, ['Model', 'Value'])

推荐阅读