如何从列表中获取人员姓名及实现按爱好查询姓名(无匹配时返回空值)
解决方案:人员姓名提取与爱好查询功能实现
嘿,我来帮你搞定这两个需求,假设咱们用Python来实现——毕竟它处理这类数据场景特别顺手~
1. 从指定列表中获取人员姓名
首先咱们先定义一个常见的人员数据结构,比如是包含多个人员字典的列表:
people = [ {"name": "张三", "hobbies": ["篮球", "读书"]}, {"name": "李四", "hobbies": ["游泳", "画画"]}, {"name": "王五", "hobbies": ["篮球", "爬山"]} ]
要提取所有人员的姓名,用列表推导式就可以轻松搞定,一行代码就能得到结果:
# 提取所有人员姓名 person_names = [person["name"] for person in people] print(person_names) # 输出: ['张三', '李四', '王五']
如果你的人员数据是类对象结构(比如每个人员是一个Person实例),只需要把person["name"]改成person.name就行,逻辑是完全一致的。
2. 实现根据爱好查询的功能
接下来咱们写一个专门的查询函数,满足「匹配爱好返回对应姓名,无匹配则返回空」的需求:
def search_by_hobby(people_list, target_hobby): # 初始化结果列表 matched_names = [] for person in people_list: # 检查目标爱好是否在当前人员的爱好列表中 if target_hobby in person["hobbies"]: matched_names.append(person["name"]) # 无匹配时返回空列表,符合「返回空值」的要求 return matched_names
咱们来测试一下这个函数:
# 查询爱好为"篮球"的人员 print(search_by_hobby(people, "篮球")) # 输出: ['张三', '王五'] # 查询不存在的爱好"唱歌" print(search_by_hobby(people, "唱歌")) # 输出: []
如果需要不区分大小写的查询(比如输入"篮球"和"篮球"都能匹配),可以稍微修改判断逻辑:
if target_hobby.lower() in [hobby.lower() for hobby in person["hobbies"]]:
这样就更灵活啦~
内容的提问来源于stack exchange,提问作者App B
相关产品推荐
相关产品推荐

