多次操作前检查字典中的键



我有一个计算字典内容的函数。根据函数的输入,某些条目(数组)可能不存在(如果用户没有请求它们)。

这是原始的代码片段,它不检查是否存在任何东西,因为它假设所有这些变量都将在字典feat中(默认用例)。

delta = feat['sdelta'] + feat['fdelta']
feat['dt'] = delta / feat['theta']
feat['ds'] = delta / feat['sigma']
feat['db'] = delta / feat['beta']
feat['at'] = feat['alpha'] / feat['theta']

我正在寻找一种策略来解决它,不涉及在看起来像这样的条件下包装每一行(与这个问题相关)

if all(elem in feat for elem in ('alpha', 'theta')):
feat["at"] = feat["alpha"] / feat["theta"]

这可能是不可能的,我可能需要在这些类型的条件中换行每一行。我知道这可能不是一个好的做法,但是这里最接近好的做法是什么呢?

更新如果键不存在,则不进行计算。基本上,如果没有可以用来构造新特性的特性,则跳过新特性。

如果您只是想在缺少一个键时跳过计算,最简单的方法是将整个代码包装在try/except块中:

try:
delta = feat['sdelta'] + feat['fdelta']
feat['dt'] = delta / feat['theta']
feat['ds'] = delta / feat['sigma']
feat['db'] = delta / feat['beta']
feat['at'] = feat['alpha'] / feat['theta']
except KeyError:
print('Could not calculate feature due to missing keys')

注意,这仍然允许发生其他异常并停止程序(例如,如果feat['theta']恰好为零,则ZeroDivisionError)。KeyError仅在您尝试使用不存在的键访问字典中的值时引发。

相关内容

  • 没有找到相关文章

最新更新