去重(名字一样,找到年龄最大的)

本文介绍了一种通过Python实现的方法,用于从包含多个字典的列表中筛选出名字相同但年龄最大的记录,并移除其余重复项。该算法适用于数据预处理阶段,确保每个名字对应的都是最大年龄值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 找到名字一样,年龄最大的一个人
# -*- coding: utf-8 -*-
from copy import deepcopy

list1 = [
    {"name": "zs", "age": 18},
    {"name": "lisi", "age": 16},
    {"name": "zs", "age": 20},
    {"name": "lisi", "age": 26},
    {"name": "lisi", "age": 28},
    {"name": "zs", "age": 20},
]

"""
主要思想是:两个之间的元素进行比较,num用来取下一个元素
如果前一个大,那么用item3来进行保留,进行下一次循环的时候,用来进行比较
"""


def distinct_name(list1):
    list2 = deepcopy(list1)
    num = 0
    n = len(list1)
    item3 = 0  # 记录比较后大的元素
    flag = 0  # 用来控制前一个元素的值为item3还是itme1
    for item1 in list1:
        if flag != 0:
            item1 = item3
        name1 = item1.get("name")
        age1 = item1.get("age")
        if num < n - 1:
            item2 = list1[num + 1]
            name2 = item2.get("name")
            age2 = item2.get("age")
            num += 1
            if name1 == name2:
                if age1 < age2:
                    list2.remove(item1)
                    flag = 0
                else:
                    list2.remove(item2)
                    item3 = item1  # 记录比较后大的元素
                    flag = 1
            else:
                flag = 0
    return list2


# 首先先把目标列表进行排序
list1.sort(key=lambda x: x["name"])

ret = distinct_name(list1)
print(ret)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值