Python 什么';It’从一个目录中获取项目是一种简单的方法,如果找不到,从另一个目录中获取?
我想从Python 什么';It’从一个目录中获取项目是一种简单的方法,如果找不到,从另一个目录中获取?,python,dictionary,Python,Dictionary,我想从a中获取一个值。如果在那里找不到,请尝试从b获取。如果在b中也找不到异常,则抛出异常 a.get(key,b[key])不起作用,因为它不会延迟计算b[key] 正确的方法是什么 下面的内容很有效,但似乎有点冗长 value = a.get(key, b.get(key, 'not found')) if value == 'not found': raise Exception() 使用条件表达式,如下所示 a[key] if key in a else b[key] a[k
a
中获取一个值。如果在那里找不到,请尝试从b
获取。如果在b
中也找不到异常,则抛出异常
a.get(key,b[key])
不起作用,因为它不会延迟计算b[key]
正确的方法是什么
下面的内容很有效,但似乎有点冗长
value = a.get(key, b.get(key, 'not found'))
if value == 'not found':
raise Exception()
使用条件表达式,如下所示
a[key] if key in a else b[key]
a[key] if key in a else b.get(key, <default_value>)
如果要避免错误,如果在这两个文件中都找不到,可以使用dict.get
,如下所示
a[key] if key in a else b[key]
a[key] if key in a else b.get(key, <default_value>)
如果你想得到关键错误,你可以让它更奇怪
(b, a)[key in a][key]
如果
key
确实位于a
中,这将选择a
,因为布尔表达式相当于1(True
)和0(False
)。因此,(b,a)[True]
将选择a
,False
将选择a
,如果您使用的是3.3+,您可以使用
如果您只对检索感兴趣,并且没有3.3+可用,那么您可以使用自己的助手功能:
def whatever(key, *args):
for mapping in args:
try:
return mapping[key]
except KeyError:
pass
raise KeyError(key)
然后将其用作
value=which('somekey',a,b)
Downvoter,如果您仍然在场,请解释我如何改进此答案。如果以后您决定不想使用KeyError
,您仍然可以执行链接。获取('c',3)
。