Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 基于某些属性查找列表中的唯一对象_Python 3.x - Fatal编程技术网

Python 3.x 基于某些属性查找列表中的唯一对象

Python 3.x 基于某些属性查找列表中的唯一对象,python-3.x,Python 3.x,我有以下代码库: from datetime import datetime from operator import attrgetter class Person: def __init__(self,name,day,month,year): self.name = name self.day = day self.mon = month self.year = year def __str__(self)

我有以下代码库:

from datetime import datetime
from operator import attrgetter

class Person:
    def __init__(self,name,day,month,year):
        self.name = name
        self.day = day
        self.mon = month
        self.year = year

    def __str__(self):
        if self.day < 10:
            day = "0" + str(self.day)
        else:
            day = str(self.day)
        if self.mon < 10:
            mon = "0" + str(self.mon)
        else:
            mon = str(self.mon)
        display = day + "-" + mon + "-" + str(self.year)
        return display

    def __repr__(self):
        if self.day < 10:
            day = "0" + str(self.day)
        else:
            day = str(self.day)
        if self.mon < 10:
            mon = "0" + str(self.mon)
        else:
            mon = str(self.mon)
        display = day + "-" + mon + "-" + str(self.year)
        return display

def sortdates(l1):
    for dates in l1:
        dates.finalbirthdate = datetime.strptime(repr(dates),"%d-%m-%Y")
    return sorted (l1,key=attrgetter('finalbirthdate'),reverse=True)

if __name__ == '__main__':
    p1 = Person("Subhayan",18,9,1984)
    p2 = Person("Poulomi",13,1,1988)
    p3 = Person("Dummy",13,1,1988)
    p4 = Person("Shaayan",25,11,1988)
    p5 = Person("Father",1,1,1954)

    check = sortdates([p1,p2,p3,p4,p5])
    for persons in check:
        print (persons)
从日期时间导入日期时间
从运算符导入吸引器
班长:
定义初始(自我、姓名、日、月、年):
self.name=名称
self.day=天
self.mon=月
self.year=年
定义(自我):
如果self.day<10:
day=“0”+str(自我日)
其他:
day=str(自我日)
如果self.mon<10:
mon=“0”+str(self.mon)
其他:
mon=str(self.mon)
显示=天+“-”+星期一+“-”+str(自身年份)
返回显示
定义报告(自我):
如果self.day<10:
day=“0”+str(自我日)
其他:
day=str(自我日)
如果self.mon<10:
mon=“0”+str(self.mon)
其他:
mon=str(self.mon)
显示=天+“-”+星期一+“-”+str(自身年份)
返回显示
def分类日期(l1):
对于l1中的日期:
dates.finalbirthdate=datetime.strtime(repr(日期),%d-%m-%Y)
返回排序(l1,key=attrgetter('finalbirthdate'),reverse=True)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
p1=人(“Subhayan”,1891984年)
p2=人(“Poulomi”,13,11988)
p3=人(“假人”,13,11988)
p4=人(“Shaayan”,25111988)
p5=人(“父亲”,1,11954)
检查=排序日期([p1、p2、p3、p4、p5])
受检人士:
印刷品(人)
现在,sortdates函数的主要用途是根据finalbirthdate属性对对象进行排序

但是,如果我想根据finalbirthdate属性的值在该列表中找出唯一性,该怎么办呢

例如,“Poulomi”和“dummy”对象都有相同的finalbirthdate属性,所以我只想取其中一个,而不是两个

有办法做到这一点吗


提前感谢。

将这些方法添加到类中

def __eq__(self, other):
    return self.day == other.day and self.mon == other.mon and self.year == other.year

def __hash__(self):
    return hash(self.__str__())
并将
check=sortdate([p1、p2、p3、p4、p5])
更改为

check = sortdates(set([p1,p2,p3,p4,p5]))

您不能获取相关列表的
set()
吗?可能重复的是我获取的集合如何仅基于finalbirthdate属性使其获取唯一?名称属性无论如何都会有所不同。非常感谢。你能不能在这个问题上多解释一下。我的意思是,这两个函数做什么?
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
形成被认为对于相等对象相等的整数值,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu