基于最低整数值筛选重复元组列表中的员工数据
解决每个雇主保留最低得分员工条目的问题
我来给你一个实用的Python解决方案,帮你从重复的元组数据集中,为每个雇主筛选出得分最低的员工条目:
思路拆解
- 先确定每个雇主的最低得分:遍历数据集,按雇主分组记录对应的最低得分(注意要把字符串类型的得分转成整数再比较)。
- 筛选符合条件的条目:再次遍历数据集,只保留那些得分等于对应雇主最低分的条目。
- 可选:去重处理:因为原数据有大量重复,如果你需要唯一的条目,可以用有序字典来去重(还能保留原数据顺序)。
完整代码实现
dataset = [ ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset1', 'John Smith', '2'), ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset2', 'Allan Smith', '1'), ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset3', 'John Smith', '2'), ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset2', 'Allan Smith', '1'), ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset1', 'John Smith', '2'), ('Employer 1', 'Video Editor', '2018-05-08 10:22:31', 'Dataset3', 'Allan Smith', '1'), ('Employer 2', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james bond', '3'), ('Employer 2', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james bond', '3'), ('Employer 2', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james brown', '1'), ('Employer 2', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james brown', '1'), ('Employer 3', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james brown', '1'), ('Employer 3', 'Cook', '2018-05-08 10:22:31', 'Dataset1', 'james brown', '1')] # 1. 计算每个雇主的最低得分 employer_min_scores = {} for entry in dataset: employer_name = entry[0] current_score = int(entry[5]) # 转成整数才能正确比较大小 # 如果雇主不在字典里,或者当前得分比已记录的更低,就更新 if employer_name not in employer_min_scores or current_score < employer_min_scores[employer_name]: employer_min_scores[employer_name] = current_score # 2. 筛选出得分等于雇主最低分的所有条目 filtered_entries = [entry for entry in dataset if int(entry[5]) == employer_min_scores[entry[0]]] # 3. 可选:去重并保持原顺序(Python 3.7+可用) unique_filtered_entries = list(dict.fromkeys(filtered_entries)) # 输出结果 print("筛选后(保留重复条目):") for item in filtered_entries: print(item) print("\n去重且保留原顺序的结果:") for item in unique_filtered_entries: print(item)
代码说明
- 步骤1:通过字典
employer_min_scores存储每个雇主的最低得分,为后续筛选提供明确的判断标准。 - 步骤2:用列表推导式快速筛选,只保留符合最低分要求的条目,逻辑清晰且执行高效。
- 步骤3:使用
dict.fromkeys()来去重,既能去除重复的元组,又能保持原数据的顺序(Python 3.7及以上版本支持字典插入顺序保留)。如果不需要保持顺序,直接用list(set(filtered_entries))更简单。
运行这段代码后,你会得到:
- Employer 1只保留Allan Smith(得分1)的所有条目;
- Employer 2只保留james brown(得分1)的所有条目;
- Employer 3因为所有条目得分都是1,所以全部保留(或去重后保留唯一条目)。
内容的提问来源于stack exchange,提问作者iNoob
相关产品推荐
相关产品推荐

