对Python爱好者和专家来说,
我的代码:
def getAssignee(keyTitle):
assignee = ''
for item in assigneeList:
if(item['title']==keyTitle):
assignee = item['name']
break
return assignee我的意图是:尝试在python中使用过滤器,并将上面的代码替换为filter函数。“受让人名单”是一份字典列表。例如。
assigneeList = [{'title':'Book', 'name':'Davis'},{'title':'TV','name':'Samsung'}]My reference: Most efficient way to search in list of dicts
我的尝试:
assignee = filter(lambda item: item['title']=='TV',assigneeList)
print(assignee['name'])我的输出:不工作。错误“值‘受让人’是不可订阅的”
我的问题:如何获得受让人的名称,就像我是如何从getAssignee()函数中得到的?
发布于 2020-08-30 13:24:36
filter的结果是一个过滤器对象,您可以通过几种方法来处理这个问题,并处理一个空过滤器的可能性。
next(.., None)获取第一次匹配或None值。def getAssignee(keyTitle):受让人=next(筛选器(lambda项:项‘== keyTitle,assigneeList),无)返回受让人’名称‘如果其他受让人’‘
def getAssignee(keyTitle):受让人=列表(筛选器(lambda项目:项目‘== keyTitle,assigneeList))如果受让人返回受让人,则返回
如果next解决方案性能更好,因为它不会生成所有的过滤器对象,( list将消耗所有的过滤器,最终它可能会很大)
发布于 2020-08-30 13:20:48
>>> assignee = filter(lambda item: item['title']=='TV',assigneeList)
>>> type(assignee)
<class 'filter'>在python3中,filter函数将返回filter对象。filter(function, iterable)等价于生成器表达式(item for item in iterable if function(item))。因此,为了评估可以调用list(assignee)的项
https://stackoverflow.com/questions/63657803
复制相似问题