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