Skip to main content
 首页 » 编程设计

Python之扁平字典,其中一些键是 'missing'

2025年05月04日22lyj

有没有更简洁的方法来做到这一点?我正在检查嵌套字典中的特定键并将其分配给变量。我将很快用它来制作 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'])