我有一本字典,它可能有也可能没有一个或两个键“foo”和“bar”。根据两者或其中一个是否可用,我需要做不同的事情。这是我正在做的事情(并且有效):
foo = None
bar = None
if 'foo' in data:
if data['foo']:
foo = data['foo']
if 'bar' in data:
if data['bar']:
bar = data['bar']
if foo is not None and bar is not None:
dofoobar()
elif foo is not None:
dofoo()
elif bar is not None:
dobar()
这似乎太冗长了 - 在 Python (2.7.10) 中这样做的惯用方法是什么?
最佳答案
这是重构代码的另一种方法:
foo = data.get('foo')
bar = data.get('bar')
if foo:
if bar:
dofoobar()
else:
dofoo()
elif bar:
dobar()
不过,我不确定它是否比 ChristianDean 的答案更清晰或更易读。
只是为了好玩,您还可以使用
dict
将 bool 元组作为键和函数作为值:{(True, True):dofoobar, (False, True):dobar, (True, False):dofoo}
你会这样使用它:
data = {'foo': 'something'}
foo = data.get('foo')
bar = data.get('bar')
def dofoobar():
print('foobar!')
def dobar():
print('bar!')
def dofoo():
print('foo!')
actions = {(True, True):dofoobar, (False, True):dobar, (True, False):dofoo}
action = actions.get((foo is not None, bar is not None))
if action:
action()
#foo!
关于Python 字典值检查不为空且不为 None,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46305758/