您的位置:

List根据某个字段去重详解

一、List根据某个字段去重并求和

def sum_unique_values(input_list, field):
    unique_dict = {}
    for item in input_list:
        if item[field] not in unique_dict:
            unique_dict[item[field]] = item
        else:
            unique_dict[item[field]][field] += item[field]
    return list(unique_dict.values())

去重是list操作中最常用的一种方法,而在某些情况下,我们不仅需要去重,还要对某个字段进行求和。这时候我们可以通过创建一个以已有字段作为key的字典来实现。对于遍历到的item,如果该字段的值不在字典中,则将其以该字段为key,item为value存入字典。否则,在字典中已经存在该字段时,直接将该字段的值加上原有的值即可。最后返回所有value即可获得去重并求和的list。

二、List根据某个字段删除

def remove_duplicates(input_list, field):
    unique_dict = {}
    for item in input_list:
        if item[field] not in unique_dict:
            unique_dict[item[field]] = item
    return list(unique_dict.values())

和上面相似,但是我们不进行求和,而是进行删除操作。同样地,我们先创建一个以某个字段为key的字典,遍历时,只有当该字段值不在字典中,才将其存储下来。最终返回所以value,即可实现去重并删除操作。

三、List根据两个字段去重分组

def group_duplicates(input_list, field1, field2):
    unique_dict = {}
    for item in input_list:
        key = (item[field1], item[field2])
        if key not in unique_dict:
            unique_dict[key] = [item]
        else:
            unique_dict[key].append(item)
    return list(unique_dict.values())

需要根据两个字段同时去重,可以通过将两个字段组成一个元组作为key,遍历时判断该key是否在字典中,若不存在,则将其以key为键值,以item为值存入字典。否则,在已有key中存放对应的item即可。

四、List数组根据某个字段排序选取3~5个

def sort_and_slice(input_list, field, reverse=True):
    sorted_list = sorted(input_list, key=lambda x: x[field], reverse=reverse)
    return sorted_list[2:5]

有时,我们需要根据某个字段进行排序,并选择指定数量的元素。这时,Python中的sorted函数可以使用。在该函数中,我们可以设置关键字参数key指定以该字段进行排序,reverse则表示降序还是升序排序。最后,我们将排序后的list进行切片即可选取指定范围内的元素。