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

时间:2018-12-10 15:39:59

标签: python python-3.x list-comprehension

试图编写一个函数来搜索转换为词典列表的请求响应。返回的每个用户将具有许多属性,但是我需要根据通过主函数传递的查询通过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')

2 个答案:

答案 0 :(得分:1)

只需更改行:

if query in user['display_name']:

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

如果键存在并且其值在None中,则上述答案将不起作用,因此我根据@tobias_k注释-

更新了答案
if query in (user['display_name'] or ''):

答案 1 :(得分:0)

似乎您的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)