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,否则返回默认值。
请注意,默认的default
是None
所以如果你说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>