簡體   English   中英

使用過濾器替換Python中的搜索功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM