我想得到一个价值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()
Run Code Online (Sandbox Code Playgroud)
Jon*_*nts 12
如果您使用的是3.3+,则可以使用ChainMap
from collections import ChainMap
a = {'a': 1}
b = {'b': 2}
# Add as many `dict`s as you want in order of priority...
chained = ChainMap(a, b)
print(chained['b'])
Run Code Online (Sandbox Code Playgroud)
如果您只对检索感兴趣并且没有3.3+可用,那么您可以使用自己的帮助函数:
def whatever(key, *args):
for mapping in args:
try:
return mapping[key]
except KeyError:
pass
raise KeyError(key)
Run Code Online (Sandbox Code Playgroud)
然后用它作为 value = whatever('somekey', a, b)
像这样使用条件表达式
a[key] if key in a else b[key]
Run Code Online (Sandbox Code Playgroud)
如果你想避免错误,如果它们都没有找到,你可以dict.get像这样使用
a[key] if key in a else b.get(key, <default_value>)
Run Code Online (Sandbox Code Playgroud)
有一个丑陋的黑客,它使用一组词典来挑选最好的词典
(b, a)[key in a].get(key)
Run Code Online (Sandbox Code Playgroud)
如果你想获得关键错误,你可以使它更加怪异,
(b, a)[key in a][key]
Run Code Online (Sandbox Code Playgroud)
这将选择a,如果key真的在a,因为布尔表达式等效于1(True)和0(False).所以,(b, a)[True]会选择a并False选择a.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |