如何编写filter函数,仅返回所有Type均为'b'的唯一ID?
编写筛选函数:仅保留所有Type字段均为'b'的唯一ID
需求说明
实现筛选逻辑,从ID-Type关联数据中,仅提取那些**所有对应Type字段值全为'b'**的唯一ID。
示例数据
| ID | Type |
|---|---|
| 124 | a |
| 124 | b |
| 125 | a |
| 125 | a |
| 125 | b |
| 126 | b |
| 126 | b |
| 126 | b |
| 126 | b |
| 127 | b |
| 127 | a |
预期结果
126
实现思路与代码示例
核心逻辑
- 按ID分组,收集每个ID对应的所有Type值
- 检查每组的Type集合中是否不包含除'b'之外的其他值
- 保留符合条件的ID
Python代码实现
def filter_ids(data): # 按ID分组,存储每个ID对应的所有Type(用集合去重) id_type_groups = {} for item in data: current_id = item['ID'] current_type = item['Type'] if current_id not in id_type_groups: id_type_groups[current_id] = set() id_type_groups[current_id].add(current_type) # 筛选出Type仅包含'b'的ID valid_ids = [id_val for id_val, types in id_type_groups.items() if types == {'b'}] # 返回结果,若有多个符合条件的ID会返回列表,这里示例仅一个 return valid_ids[0] if valid_ids else None # 示例数据格式转换 sample_data = [ {'ID': 124, 'Type': 'a'}, {'ID': 124, 'Type': 'b'}, {'ID': 125, 'Type': 'a'}, {'ID': 125, 'Type': 'a'}, {'ID': 125, 'Type': 'b'}, {'ID': 126, 'Type': 'b'}, {'ID': 126, 'Type': 'b'}, {'ID': 126, 'Type': 'b'}, {'ID': 126, 'Type': 'b'}, {'ID': 127, 'Type': 'b'}, {'ID': 127, 'Type': 'a'}, ] # 调用并输出结果 print(filter_ids(sample_data)) # 输出:126
逻辑说明
- 用字典分组存储每个ID对应的Type集合,利用集合自动去重的特性,减少重复判断
- 通过判断集合是否等于
{'b'},确保该ID的所有Type值都是'b',没有其他类型混入 - 若没有符合条件的ID,函数会返回
None,兼容空结果场景
内容的提问来源于stack exchange,提问作者NKHatzo
相关产品推荐
相关产品推荐

