使用lambda减少列表

时间:2015-10-27 13:28:43

标签: python python-2.7 lambda reduce

我需要写几个这样的函数。是否有更好的方法在一行左右使用lambda编写此函数。

def is_digital(offers):
    for offer in offers:
        digital = True if 'digital' in offer and offer['digital'] else False
        if digital:
            return True
    return False

2 个答案:

答案 0 :(得分:6)

您可以使用any

def is_digital(offers):
    return any(offer.get('digital') for offer in offers)

或者如果你想删除完整的函数定义并且只使用lambda(不是最好的主意),你可以这样做:

is_digital = lambda offers: any(offer.get('digital') for offer in offers)

感谢jonrsharpe的评论提醒我.get是一件事。

答案 1 :(得分:2)

至于我,检查的方式更具可读性和明确性:

def is_digital(offers):
    return any(map(lambda x: x.get('digital', False), offers))

你甚至可以抛出默认的'False',因为如果没有找到指定的键,'None'是默认的返回值。但我认为代码将变得不那么明确。

def is_digital(offers):
    return any(map(lambda x: x.get('digital'), offers))

选择是你的。 =)