在Perl我可以做这样的事情:Python是否有像Perl一样的定义或运算符?
foo = a // b;
什么我不知道是如果Python有类似这样的东西。我试过以下,但显然它不工作:
foo = {'key1':'val1','key2':'val2'}
bar = foo['doesntexist'] or foo['key1']
而我得到的错误:
KeyError: 'doesntexist'
在Perl我可以做这样的事情:Python是否有像Perl一样的定义或运算符?
foo = a // b;
什么我不知道是如果Python有类似这样的东西。我试过以下,但显然它不工作:
foo = {'key1':'val1','key2':'val2'}
bar = foo['doesntexist'] or foo['key1']
而我得到的错误:
KeyError: 'doesntexist'
你不需要or
可言:
bar = foo.get('doesntexist', foo['key1'])
完美,谢谢!这正是我所期待的。 –
你的方法是不工作的原因是因为Python的布尔之前引发错误表达能够被评估。而不是索引字典,您需要使用.get()
。而不是引发错误,.get()
回报None
,让你的表达,以正确地评价:
bar = foo.get('doesntexist') or foo.get('key1')
需要注意的是,如果第一项的值是0
或计算结果为false其他任何值,你的方法将失败。如果这比你使用上述方法好。
但是,如果您不希望发生上述行为,则必须测试第一个值是否为None
。然而,在这一点上,倒不如简单地这样的逻辑解压缩到一个单独的函数:
def get_key(d, test_key, default_key):
"""
Given a dictionary(d), return the value of test_key.
If test_key does not exists, return the default_key
instead.
"""
if d.get(test_key) is not None:
return d.get(test_key)
return d.get(default_key)
哪位能像这样被使用:
foo = {'key1':'val1','key2':'val2'}
bar = get_key(foo, 'doesntexist', 'key1')
该问题不是'或'它是'foo ['doesntexist']'引发错误。 –