django 字典列表的查找

大概有类似这么另一个字典列表

[{'name':'jack','point':100},{'name':'rose','point':75}]

然后有了各名字列表['jack','rose','tom']

现在就是查询这个名字列表 in 字典列表 ,凡是名字与字典列表中的‘name’匹配的,就返回'point',没有就返回none

怎么弄的?

d_list = [{'name':'jack','point':100},{'name':'rose','point':75}]
name = ['jack','rose','tom']

for n in name:
    is_exist = next((x for x in d_list if x.get("name") == n), False)
    
    point = is_exist.get("point") if is_exist else None

 

名字列表里的名字要一次性查询么?

可以先把字典列表转为字典(name: key 的映射),然后遍历名字列表,从字典中高效地查找每个名字对应的point。

示例代码如下:

def find_one_point(name_point_dict, name):
    if name in name_point_dict:
        return name_point_dict[name]
    else:
        return None


def find_points(dict_list, name_list):
    name_point_dict = {}
    for d in dict_list:
        name_point_dict[d['name']] = d['point']

    result_list = []
    for name in name_list:
        point = find_one_point(name_point_dict, name)
        result_list.append(point)

    return result_list


if __name__ == '__main__':
    name_point_list = [{'name': 'jack', 'point': 100}, {'name': 'rose', 'point': 75}]
    name_list = ['jack', 'rose', 'tom']
    print(find_points(name_point_list, name_list))

 

运行结果如下:

[100, 75, None]