如何用Python对AWS S3提取的重复值去重并生成唯一值列表?
如何从S3提取的重复值中生成唯一值列表?
问题背景
我通过以下代码从AWS S3中提取了一些值:
for my_bucket_files in bucket_name.objects.all(): split_objects = my_bucket_files.key.split('/') single_split_objects = split_objects[0] print(single_split_objects)
代码输出包含大量重复项,部分值还带首尾空格:
air squat air squat air squat air squat push up push up push up push up lunges lunges lunges bench press bench press bench press
我需要处理这些值,得到一个包含唯一值的可复用列表,格式如下:
air squat push up lunges bench press
解决方案
方法1:用集合快速去重(推荐)
集合天然支持自动去重,先收集所有清理后的值到集合,再转成有序列表即可:
unique_items = set() for my_bucket_files in bucket_name.objects.all(): split_objects = my_bucket_files.key.split('/') # 清理首尾空格,避免带空格和不带空格的字符串被当成不同项 cleaned_item = split_objects[0].strip() unique_items.add(cleaned_item) # 转成有序列表(按字母排序,可选) unique_list = sorted(unique_items) # 打印或复用这个列表 for item in unique_list: print(item)
方法2:手动判断去重(保留插入顺序)
如果需要严格保留元素第一次出现的顺序(比如和S3中首次出现的顺序一致),可以用列表判断是否已存在:
unique_list = [] for my_bucket_files in bucket_name.objects.all(): split_objects = my_bucket_files.key.split('/') cleaned_item = split_objects[0].strip() if cleaned_item not in unique_list: unique_list.append(cleaned_item) # 打印结果 for item in unique_list: print(item)
方法3:用字典实现有序去重(Python 3.7+)
Python 3.7及以上版本的字典会保留键的插入顺序,利用这个特性也能实现去重:
unique_dict = {} for my_bucket_files in bucket_name.objects.all(): split_objects = my_bucket_files.key.split('/') cleaned_item = split_objects[0].strip() unique_dict[cleaned_item] = None # 值无关紧要,只利用键的唯一性 # 提取字典的键作为唯一列表 unique_list = list(unique_dict.keys()) for item in unique_list: print(item)
关键注意点
原输出中的字符串存在首尾空格(比如air squat 和air squat),必须用.strip()清理掉,否则去重会不彻底,导致同一个项被当成不同元素。
内容的提问来源于stack exchange,提问作者Manatsa Mbanje
相关产品推荐
相关产品推荐

