Python列表处理:提取各标签类别下的首条标签详情
实现思路
- 按
label字段做类别去重,每个标签类别仅保留列表中出现的第一条记录 - 用集合存储已经处理过的标签值,遍历原始列表时跳过同标签的后续记录
- 时间复杂度为O(n),仅需一次遍历即可完成处理,性能最优
Python实现代码
# 原始标签数据 input_data = [ {'label': 'Accord_row_loc', 'xmin': 48.0, 'ymin': 833.0, 'xmax': 1652.0, 'ymax': 900.3014907836914, 'likelihood': 5}, {'label': 'Accord_row_loc', 'xmin': 48.0, 'ymin': 900.30078125, 'xmax': 1652.0, 'ymax': 967.30078125, 'likelihood': 5}, {'label': 'Accord_row_loc', 'xmin': 48.0, 'ymin': 967.421875, 'xmax': 1652.0, 'ymax': 1035.0, 'likelihood': 5}, {'label': 'Accord_row_contact_info', 'xmin': 170.0, 'ymin': 1583.1669921875, 'xmax': 1651.0, 'ymax': 1617.0, 'likelihood': 5}, {'label': 'Accord_row_contact_info', 'xmin': 170.0, 'ymin': 1617.0, 'xmax': 1651.0, 'ymax': 1649.1640625, 'likelihood': 5}, {'label': 'Accord_row_contact_info', 'xmin': 170.1005859375, 'ymin': 1649.2998046875, 'xmax': 1651.0, 'ymax': 1685.0, 'likelihood': 5}, {'label': 'Accord_row_individuals', 'xmin': 48.0, 'ymin': 1801.0, 'xmax': 1652.0, 'ymax': 1867.0, 'likelihood': 5} ] def extract_first_per_label(label_list): processed_labels = set() result = [] for item in label_list: label_val = item['label'] if label_val not in processed_labels: processed_labels.add(label_val) result.append(item) return result # 执行处理 output = extract_first_per_label(input_data)
运行结果
执行代码后得到的输出与预期完全匹配:
[ {'label': 'Accord_row_loc', 'xmin': 48.0, 'ymin': 833.0, 'xmax': 1652.0, 'ymax': 900.3014907836914, 'likelihood': 5}, {'label': 'Accord_row_contact_info', 'xmin': 170.0, 'ymin': 1583.1669921875, 'xmax': 1651.0, 'ymax': 1617.0, 'likelihood': 5}, {'label': 'Accord_row_individuals', 'xmin': 48.0, 'ymin': 1801.0, 'xmax': 1652.0, 'ymax': 1867.0, 'likelihood': 5} ]
注:代码中避免使用
input作为变量名,防止覆盖Python内置的input()函数引发异常。
内容的提问来源于stack exchange,提问作者Zeeshan Akhtar
相关产品推荐
相关产品推荐

