python自定义数据操作

2023-03-14 00:19:44 来源:网络

python自定义数据操作

求python中,自定义的复杂数据结构,快速排序的方法

应该是你sorted的使用方式不对吧,它可以对name.key这样的形式进行排序的。

class m:

    def __init__(self,name,id):

        self.name=name

        self.id=id

    @property

    def key(self):

        return self.name

    def len(self):

        return len(self.name)

    def __str__(self):

        return '{{\'name\':\'{0}\',\'id\':{1}}}' \

               .format(self.name,self.id) 

    __repr__ = __str__

s = [m('zzzz',1),m('aaa',4)]

l = [('source', s),

     ]

# 直接属性排序

l.append(('by name', sorted(s, key=lambda x: x.name)))

l.append(('by id', sorted(s, key=lambda x: x.id)))

# 属性函数排序

l.append(('by key', sorted(s, key=lambda x: x.key)))

# 函数排序

l.append(('by len()', sorted(s, key=lambda x: x.len())))

for e in l:

    print(e[0])

    print(e[1])

这是输出的结果:

source

[{'name':'zzzz','id':1}, {'name':'aaa','id':4}]

by name

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

by id

[{'name':'zzzz','id':1}, {'name':'aaa','id':4}]

by key

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

by len()

[{'name':'aaa','id':4}, {'name':'zzzz','id':1}]

上述四种用法都是没问题的,至于name[key]的形式同样是OK的。

sorted的参数key,它是一个函数,简单的话可以直接用lambda,复杂点的可以定义成有一个参数的函数,比如:

def sorted_other(item):

    if hasattr(item, 'name'):

        return item.name

    else:

        return None

l.append(('by other func', sorted(s, key=sorted_other)))

免责声明:内容来自网络,若侵犯您的权利,请在一个月内通知我们,会及时删除 @轻流