簡體   English   中英

具有部分字符串匹配的列表理解

[英]List comprehension with partial string match

嘗試編寫一個函數以搜索轉換為詞典列表的請求響應。 返回的每個用戶將具有許多屬性,但是我需要根據通過主函數傳遞的查詢通過display_name查找用戶。

當前出現錯誤:

如果在用戶['display_name']中進行查詢:TypeError:類型“ NoneType”的參數不可迭代

功能定義

def search_users(self, query, group='any'):
    # Returns list of dictionaries representing users
    users = self.get_all_users()

    for user in users:
        if query in user['display_name']:
            result_set.append(user)

主函數調用

looker.search_users('steve')

只需更改行:

if query in user['display_name']:

if query in user.get('display_name',''):

如果鍵存在並且其值為None ,則上述答案將不起作用,因此我根據@tobias_k注釋更新了答案-

if query in (user['display_name'] or ''):

看來您的display_name值中至少有一個是None。

在這種情況下,使用in關鍵字時,您將in None查找某些內容,這將引發異常。

根據您要如何處理這種情況,可以在嘗試追加之前檢查該值是否存在。

for user in users:
        if user and user['display_name'] and query in user['display_name']:  # probably extract this check into a helper
            result_set.append(user)

我將布爾邏輯提取到一個單獨的方法中:

def is_query_match(user, query):
    if user and user['d'] and query in user['d']:
        return True
    return False

因此,您可以使用:

for user in users:
    if is_query_match(user, query):
        result_set.append(user)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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