Python 根据其中一个项目值对项目进行排序的最佳方法是什么

Python 根据其中一个项目值对项目进行排序的最佳方法是什么,python,Python,列表中有两个对象的实例 class Thing(): timeTo = 0 timeFrom = 0 name = "" o1 = Thing() o1.name = "One" o1.timeFrom = 2 o2 = Thing() o2.timeTo = 20 o2.name = "Two" myList = [o1, o2] biggestIndex = (myList[0].timeFrom < myList[1].timeTo) &

列表中有两个对象的实例

class Thing():
     timeTo = 0
     timeFrom = 0
     name = ""

o1 = Thing()
o1.name = "One"
o1.timeFrom = 2

o2 = Thing()
o2.timeTo = 20
o2.name = "Two"

myList = [o1, o2]


biggestIndex = (myList[0].timeFrom < myList[1].timeTo) & 1
bigger  = myList.pop(biggestIndex)
lesser  = myList.pop()

print bigger.name
print lesser.name
class Thing():
timeTo=0
timeFrom=0
name=“”
o1=事物()
o1.name=“一个”
o1.timeFrom=2
o2=事物()
o2.timeTo=20
o2.name=“两个”
myList=[o1,o2]
biggestIndex=(myList[0]。timeFrom
o1和o2都有两个属性,我想比较列表中的第一个timeFrom属性和第二个timeTo属性

我觉得这有点尴尬和古怪,有没有更好、更易读的方法

编辑:

attrgetter也可以使用排序或需要使用功能的任何位置来搜索

lesser, bigger = sorted(myList, key=getter)

最好的解决方案是使
事物
实例可排序。您可以通过实现
\uu lt\uu
来实现这一点:

class Thing():
     timeTo = 0
     timeFrom = 0
     name = ""

     def __lt__(self, other):
         return self.timeFrom < other.timeTo


lesser, bigger = sorted(myList)

如果对象只能有一个时间值,我会这样做:

class Thing(object):
    def __init__(self, name, time = 0, timename = 'to'):
        self.name, self.time, self.timename = (name,time,timename)

    def __repr__(self):
        return "Thing(%r, %i, %r)" % (self.name, self.time, self.timename)

    def __lt__(self, other):
        return self.time < other.time

o1 = Thing("One", 5, 'from')

o2 = Thing("Two", 20, 'to')

myList = [o1, o2]

print myList
print max(myList)
print min(myList)
类事物(对象):
定义初始化(self,name,time=0,timename='to'):
self.name,self.time,self.timename=(name,time,timename)
定义报告(自我):
返回“Thing(%r,%i,%r)”%(self.name、self.time、self.timename)
定义(自身、其他):
返回自我时间<其他时间
o1=事物(“一”,5,“来自”)
o2=事物(“2”,20,'到')
myList=[o1,o2]
打印myList
打印最大值(myList)
打印最小值(myList)

+1,
操作符。attrgetter
绝对是正确的方法(但请编辑此A以正确操作:从
导入操作符开始,显式使用
操作符。attrgetter
——否则不仅是有争议的风格,而且肯定会让初学者非常困惑,因为Python给了他们一个“找不到的名字”错误!!!)。OP想要通过比较两个属性进行排序,这样就无法进行排序(而且它没有给出正确的结果)。正如THC4k所说,我需要将一个属性与另一个属性进行比较,有没有办法使这符合我比较一个属性与另一个属性的需要?@Justin Ardini:这是OP定义的度量的一个属性。在这种情况下,o1和o2是不可排序的。当您有
o1.timeFrom>=o2.timeTo
o2.timeFrom>=o1.timeTo
时,您需要
o1.timeFrom=o2.timeTo
。。。这毫无意义!完美的最后我编写了一个sorter,并将其用作sorted函数的关键参数,谢谢!
class SortAdaper(object):
    def __init__(self, obj ):
        self.obj = obj

class TimeLineSorter(SortAdaper):
    """ sorts in a timeline """
    def __lt__(self, other):
        return self.obj.timeFrom < other.obj.timeTo

class NameSorter(SortAdaper):
    """ sorts by name """
    def __lt__(self, other):
        return self.obj.name < other.obj.name

print sorted( myList, key=TimeLineSorter)
print sorted( myList, key=NameSorter)
class Thing(object):
    def __init__(self, name, time = 0, timename = 'to'):
        self.name, self.time, self.timename = (name,time,timename)

    def __repr__(self):
        return "Thing(%r, %i, %r)" % (self.name, self.time, self.timename)

    def __lt__(self, other):
        return self.time < other.time

o1 = Thing("One", 5, 'from')

o2 = Thing("Two", 20, 'to')

myList = [o1, o2]

print myList
print max(myList)
print min(myList)