用filter替换Python中的搜索函数

2024-05-28 19:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

对于Python爱好者和专家

我的代码:

def getAssignee(keyTitle):
    assignee = ''
    for item in assigneeList:
        if(item['title']==keyTitle):
            assignee = item['name']
            break
    return assignee

我的意图:在python中试用过滤器,并用过滤器函数替换上述代码。受让人列表是一个字典列表。 例如

assigneeList = [{'title':'Book', 'name':'Davis'},{'title':'TV','name':'Samsung'}]

我的参考资料:Most efficient way to search in list of dicts

我的尝试:

assignee = filter(lambda item: item['title']=='TV',assigneeList)
print(assignee['name'])

我的输出: 不工作。错误“值‘受让人’不可订阅”

我的问题:如何获取受让人名称,比如如何从getAssignee()函数获取


Tags: 函数代码namein过滤器列表titletv
2条回答

filter的结果是一个filter对象,您可以通过几种方式处理它,并处理空过滤器的可能性

  • 使用next(.., None)获取第一个匹配或None

    def getAssignee(keyTitle):
        assignee = next(filter(lambda item: item['title'] == keyTitle, assigneeList), None)
        return assignee['name'] if assignee else ''
    
  • 收集列表中的项目,然后选择第一个

    def getAssignee(keyTitle):
        assignee = list(filter(lambda item: item['title'] == keyTitle, assigneeList))
        return assignee[0]['name'] if assignee else ''
    

next解决方案如果性能更好,因为它不会生成所有筛选器对象,(list将消耗所有筛选器,最终可能会很大)

>>> assignee = filter(lambda item: item['title']=='TV',assigneeList)
>>> type(assignee)
<class 'filter'>

在python 3中filter函数将返回filter对象filter(function, iterable)等价于生成器表达式(item for item in iterable if function(item))。因此,为了评估项目,您可以调用list(assignee)

相关问题 更多 >

    热门问题