我发现自己经常写这样的东西而且看起来太罗嗦了:
obj = my_dict.get('obj')
if obj:
var = obj
有更好的方法吗?也许在一条线上?
答案 0 :(得分:11)
get
函数接受第二个参数,默认值为:
get(key [,default]) 如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError。
http://docs.python.org/library/stdtypes.html
因此,您可以使用以下内容复制问题的代码:
var = my_dict.get('obj', var)
答案 1 :(得分:4)
obj = my_dict.get('obj')
if obj: # <--- test is on truthiness of obj
# if we are here, it means:
# 1. my_dict has key 'obj', AND...
# 2. at least one of the following,
# my_dict['obj'].__nonzero__() returned True (__bool__ for python 3)
# OR
# my_dict['obj'].__len__() returned something > 0
# OR
# my_dict['obj'] is not None, and is an instance which defines neither of __nonzero__ or __len__
var = obj
当前在这里的所有其他5个答案(包括已接受的答案)都在蹦蹦跳跳,并且在您查找的值False
时,您的行为将与您所要求的不同布尔上下文。
假设您已经定义了var
,则可以使用此单行:
var = my_dict['obj'] if 'obj' in my_dict and my_dict['obj'] else var
但请注意,它与您的情况略有不同:如果先前未定义NameError
,则会提升var
,而您只是继续var
不在范围内。
也许你应该澄清你的预期行为以消除一些困惑!
答案 2 :(得分:2)
我觉得这个表格最明确可读,我一直都在使用它:
moo = animals["cow"] if "cow" in animals else None
答案 3 :(得分:1)
假设my_dict
就是它所说的(字典):
var = my_dict.get('obj') if 'obj' in my_dict else var
编辑以保留原始问题的意图。
答案 4 :(得分:-1)
var = thedict.get('thekey', var)