如何解决使用过滤器替换Python中的搜索功能
对于Python爱好者和专家,
我的代码:
def getAssignee(keyTitle):
assignee = ''
for item in assigneeList:
if(item['title']==keyTitle):
assignee = item['name']
break
return assignee
我的意图:尝试在python中试用 filter 并将上述代码替换为 filter 函数。受让人列表是词典列表。 例如
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'])
我的输出: 不工作错误“值'assignee'无法下标”
我的问题:如何获取受让人的姓名,就像我从getAssignee()函数中获取的名字一样?
解决方法
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(function,iterable)
等效于生成器表达式(item for item in iterable if function(item))
。因此,为了评估项目,您可以致电list(assignee)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。