Python字典去重及CSV交换成对列去重方案咨询
嘿,这两个问题我都挺熟悉的,给你一步步拆解解决方案:
1. 如何在Python中实现字典去重?
首先得明确:字典的键本身就是唯一的,所以通常说的“字典去重”指的是移除值重复的键值对。这里分享两种实用方法:
方法一:遍历+集合记录已出现的值
这种方法逻辑清晰,容易理解,还能保留第一个出现的键值对:original_dict = {'a': 1, 'b': 2, 'c': 1, 'd': 3} seen_values = set() unique_dict = {} for key, value in original_dict.items(): if value not in seen_values: seen_values.add(value) unique_dict[key] = value print(unique_dict) # 输出: {'a': 1, 'b': 2, 'd': 3}方法二:字典推导式简化写法
利用Python的短路特性,用一行推导式完成,效果和上面一致:original_dict = {'a': 1, 'b': 2, 'c': 1, 'd': 3} seen_values = set() unique_dict = {k: v for k, v in original_dict.items() if not (v in seen_values or seen_values.add(v))}
2. 处理CSV中交换成对数据并避免重复
针对你说的“A-B与B-A视为重复,要统一输出格式”的需求,核心思路是生成标准化的唯一键,让交换的成对数据对应同一个键,这样就能自动避免重复。具体步骤如下:
- 用
csv模块读取制表符分隔的文件(指定delimiter='\t'); - 对每一行的前两列数据,排序后拼接成标准化字符串(比如A和B排序后拼接成A-B);
- 用这个标准化字符串作为字典的键,存入数据时自然会去重。
完整代码示例:
import csv # 用来存储去重后的标准化成对数据 unique_pairs = {} # 替换成你的CSV文件路径 with open('your_data.csv', 'r', newline='', encoding='utf-8') as csv_file: reader = csv.reader(csv_file, delimiter='\t') for row in reader: # 确保当前行至少有两列数据 if len(row) >= 2: item1 = row[0].strip() item2 = row[1].strip() # 生成标准化键:排序后用'-'拼接,A-B和B-A都会变成A-B(假设A字符串顺序在B前面) standard_key = '-'.join(sorted([item1, item2])) # 只存入未出现过的成对数据 if standard_key not in unique_pairs: unique_pairs[standard_key] = standard_key # 按照示例格式输出 output = '· ' + ' & '.join(unique_pairs.values()) print(output) # 示例输出: · A-B & C-D
如果需要保留原行的其他信息(比如第三列的数据),可以把字典的值改成整行数据,比如unique_pairs[standard_key] = row,后续使用时再提取需要的内容即可。
内容的提问来源于stack exchange,提问作者primemg
相关产品推荐
相关产品推荐

