Python的getattr相当于字典?

在Python中,如果它存在,给我dict['foo'] ,如果不存在,给我这个其他值bar是什么最简洁的方式? 如果我使用的是对象而不是字典,那么我使用getattr

 getattr(obj, 'foo', bar) 

但是如果我尝试使用字典,这会引发一个关键的错误(我发现这个区别是来自JavaScript / CoffeeScript的不幸)。 同样,在JavaScript / CoffeeScript中,我只是写

 dict['foo'] || bar 

但是,这又会产生一个KeyError。 该怎么办? 请简洁一点

dict.get(key, default)返回dict[key]如果键入dict,否则返回默认值。

请注意,默认的defaultNone所以如果你说dict.get(key)和key不在dict中,那么这将只返回None而不是像使用[]键访问符号时引发KeyError一样。

另外看看集合模块的defaultdict类。 这是一个字典,您可以指定它找不到密钥时必须返回的内容。 有了它你可以做这样的事情:

 class MyDefaultObj: def __init__(self): self.a = 1 from collections import defaultdict d = defaultdict(MyDefaultObj) i = d['NonExistentKey'] type(i) <instance of class MyDefalutObj> 

这允许你使用熟悉的d [i]约定。

但是,正如mikej所说,.get()也可以,但是这里更接近JavaScript的例子:

 d = {} i = d.get('NonExistentKey') or MyDefaultObj() # the reason this is slightly better than d.get('NonExistent', MyDefaultObj()) # is that instantiation of default value happens only when 'NonExistent' does not exist. # With d.get('NonExistent', MyDefaultObj()) you spin up a default every time you .get() type(i) <instance of class MyDefalutObj>