我有一本字典,它可能有也可能没有一个或两个键“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/

10-12 18:25