Python sorted:对自定义的数据结构排序

Python sorted:对自定义的数据结构排序

Python 内置的sorted的函数可以用来对自定义的数据结构(列表)(设该列表为myList)排序,用法如下。

 

首先上定义。

Python 2下参数列表:sorted(iterable, cmp, key, reverse)

Python 3下参数列表:sorted(iterable, key, reverse)

 

Python 2 下分两步:

1. 对于自定义的数据结构可以重写一个cmp函数:

def compare(item1, item2):

   {某种比较方式,得出表示大或小的布尔值}

    return 表示大或小的布尔值

2.调用sorted:

myList = sorted(myList, cmp = compare) # reverse的设置视需要而定

 

Python 3 下分两步:

1. 对于自定义的数据结构可以重写一个getKeyValue函数:

def getKeyValue(item):

    keyValue ={对于MyList的元素item,获得用于比较的键值}

    return keyValue

2.调用sorted:

myList = sorted(myList, key = getKeyValue) # reverse的设置视需要而定

 

小结:

对于像我这种从C/C++过来的程序员,使用sorted时会自然地想到要去重写cmp函数,这在Python 2 环境下是没有问题的。但为了简化和统一,Python 3去掉了sorted()方法中的cmp参数,使得重写cmp函数的办法失效,如果一定要重写cmp,可以用functools.cmp_to_key()来曲线救国,具体可以参考链接:Python3: 找回sort()中消失的cmp参数 - Penguin

不过,由于Python 2 的语法中sorted的同样包含了key这个参数,所以Python 3下的方法应当是同样适用于Python 2的。

对于Python 3 中的key这个参数,网上有一些文章解释了这个参数是什么,以及如何用,在此不多赘述,但如果自己写的数据结构比较复杂,建议还是手动写getKeyValue以免出错。key = getKeyValue 把自己写的方法名 ‘getKeyValue’  传给key,这样就可以用自己的方法来获取用于比较的键值。

举个例子,假设要对某些商品按照其价格进行排序,商品存在myList中——myList是一个list,其中list的每个元素(item)是一个series。元素(item)示例如下:


weight  200.00g

shop   XX配件专营店

name  USB有线鼠标台式电脑笔记本通用 黑色

price   ¥,1.28


这里,价格是像 ‘¥,1.28’ 这样的字符串,那么我们可以写一个getPrice来获取每个item的价格:

def getPrice(item):

    return float(item['price'][2:])

然后调用sorted

myList = sorted(myList, key = getPrice)

即可获得正确排序结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值