python 中list.sort()是列表中非常常用的排序函式, key 引數可以對單個屬性進行排序。
但是想要實現類似 sql 中order by id, age 一樣,對多個字段進行排序就不支援了。
py2 中 sort() 函式還有個 cmp 引數可以傳入乙個方法,可以自定義對多個屬性進行排序,py3 中移除了這個字段。
py3 想要實現這個功能,需要使用 functools 模組中的方法,例項如下
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: wxnacy([email protected])
from functools import cmp_to_key
def cmp_func(a, b):
if a['id'] < b['id']:
程式設計客棧 程式設計客棧return -1
elif a['id'] > b['id']:
return 1
if a['name'] < b['程式設計客棧name']:
return -1
elif a['name'] > b['name']:
return 1
return 0
arr.sort(key=cmp_to_key(cmp_func))
上面的例子我們實現了 id 正序排序,如果 id 相同,則按照 age 正序排序
為了方便可以封裝成乙個方法,以供列表呼叫,封裝的方法 demo 可以參見位址
總結本文標題: python 使用多屬性來進行排序
本文位址:
Python實現按物件多屬性排序
多屬性排序 把需要排序的屬性拿出來作為乙個 tuple,主要的放前面,次要的放後面。假如某物件有n個屬性,那麼先按某規則對屬性a進行排序,在屬性a相等的情況下再按某規則對屬性b進行排序,以此類推。終端列印結果如下 按照屬性name進行排序 按照ascii進行排序,本案例中,按照小寫字母的順序進行排序...
Python對多屬性的重複資料去重
python中的pandas模組中對重複資料去重步驟 1 利用dataframe中的duplicated方法返回乙個布林型的series,顯示各行是否有重複行,沒有重複行顯示為false,有重複行顯示為true 2 再利用dataframe中的drop duplicates方法用於返回乙個移除了重複...
python 高階教程 使用物件屬性進行排序
0.摘要 python中的類通常不支援比較操作,但是我們可以依據類的屬性值進行排序。本文主要介紹使用operator.attrgetter 方法獲取類的屬性值,從而完成排序。1.operator.attrgetter 方法 from operator import attrgetter class ...