情况: 当给定的HashKey通过URL发送到视图时,Django视图从服务器(亚马逊的DynamoDB表)中获取数据项。
问题: 因为它是非关系型数据库,所以DynamoDB表中的某些项目缺少其他项目可能具有的键 - >针对某些获取尝试引发了KeyError,这意味着如果我在视图中分配字典,则会因为KeyError而停止整个过程。这意味着我必须为每次获取尝试(字典值赋值)尝试/除了KeyError 。
问题: 是否有python语法允许在分配值时在同一行上尝试/除外?类似的东西:
'times_a_day': try jsonFormatIndications[elem]['times_a_day']) except: pass
先谢谢!
答案 0 :(得分:0)
不,你不能在一行中这样做。
您可以使用.get()
和函数来优雅地处理所有案例。
get(key[, default])
如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError
。
我们可以定义一个名为get_nested_key_value()
的通用函数,该函数将使用3个参数my_dict
,outer_key
和inner_key
来获取所需的值。
my_dict
:正在执行查找的字典
outer_key
:elem
在这种情况下为
inner_key
:在elem
字典中查找的密钥(在这种情况下为times_a_day
)
我们首先检查字典中是否存在elem
,如果它存在,则使用times_a_day
检查.get()
是否存在。如果它存在,我们将返回该值。否则,将返回None
。
def get_nested_key_value(my_dict, outer_key, inner_key):
if my_dict.get(outer_key) and my_dict[outer_key].get(inner_key): # check if both keys present
return my_dict[outer_key][inner_key] # return the required value
return None # return None if key not found
然后,您可以调用函数,该函数将返回值,如果找到键,则为None
。
'times_a_day' : get_nested_key_value(jsonFormatIndications, elem, 'times_a_day')