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)

即可获得正确排序结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容