[英]Using filter to replace search function in 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'}]
我的參考: 在字典列表中搜索的最有效方法
我的嘗試:
assignee = filter(lambda item: item['title']=='TV',assigneeList)
print(assignee['name'])
我的輸出:不工作。 錯誤“值‘受讓人’不可訂閱”
我的問題:如何獲取受讓人名稱,就像我從 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.