通過某個關鍵字排序乙個字典列表

2021-10-01 23:39:36 字數 1763 閱讀 9203

你有乙個字典列表,你想根據某個或某幾個字典欄位來排序這個列表。

rows =[,

,,]

根據任意的字典欄位來排序輸入結果行是很容易實現的,**示例:

from operator import itemgetter

rows_by_fname =

sorted

(rows, key=itemgetter(

'fname'))

rows_by_uid =

sorted

(rows, key=itemgetter(

'uid'))

print

(rows_by_fname)

print

(rows_by_uid)

**的輸出如下:

[,,

,][,

,,]

itemgetter() 函式也支援多個 keys,比如下面的**

rows_by_lfname =

sorted

(rows, key=itemgetter(

'lname'

,'fname'))

print

(rows_by_lfname)

會產生如下的輸出:

[,,

,]

在上面例子中, rows 被傳遞給接受乙個關鍵字引數的 sorted() 內建函式。這個

引數是 callable 型別,並且從 rows 中接受乙個單一元素,然後返回被用來排序的值。

itemgetter() 函式就是負責建立這個 callable 物件的。

operator.itemgetter() 函式有乙個被 rows 中的記錄用來查詢值的索引引數。可

以是乙個字典鍵名稱,乙個整形值或者任何能夠傳入乙個物件的 getitem () 方法的

值。如果你傳入多個索引引數給 itemgetter() ,它生成的 callable 物件會返回乙個

包含所有元素值的元組,並且 sorted() 函式會根據這個元組中元素順序去排序。但你

想要同時在幾個字段上面進行排序 (比如通過姓和名來排序,也就是例子中的那樣) 的

時候這種方法是很有用的。

itemgetter() 有時候也可以用 lambda 表示式代替,比如:

rows_by_fname =

sorted

(rows, key=

lambda r: r[

'fname'])

rows_by_lfname =

sorted

(rows, key=

lambda r:

(r['lname'

],r[

'fname'])

)

這種方案也不錯。但是,使用 itemgetter() 方式會執行的稍微快點。因此,如果

你對效能要求比較高的話就使用 itemgetter() 方式。

最後,不要忘了這節中展示的技術也同樣適用於 min() 和 max() 等函式。比如:

>>

>

min(rows, key=itemgetter(

'uid'))

>>

>

max(rows, key=itemgetter(

'uid'))

>>

>

python 通過關鍵字排序字典

q 有乙個字典列表,想根據某個或某幾個字典字段排序這個列表 a 可以使用operator模組的itemgetter函式來實現 rows 示例 from operator import itemgetter rows by fname sorted rows,key itemgetter fname ...

寫了乙個字典樹

上星期寫了乙個鍊錶,寫的很艱難,跌跌絆絆。昨天我又試著寫了乙個單詞樹。這次順手多了,沒遇到什麼問題,非常順利,我也放棄了自定義結構體型別的寫法。將每一處結構體都用struct 寫。可能 不是非常簡潔高效,但是,目前測試功能正常。以後我會慢慢改進學習的。下面是完整 我準備放到我的期末作業裡面用。小愉悅...

累就乙個字

最近也學了一把跳槽,新公司坐落在北師大校園裡,環境是一流,可惜就是遠過頭了,一天就要浪費兩個小時在車上,比以前還慘。值得安慰的是公司坐落在學校裡,每天在校園裡看到那些青春活力的學生,也會覺得自己年輕了好幾歲,感覺非常棒。最重要的是北師大靚女成群,真是大飽眼福啊 別鄙視咱,哪個男人不喜歡欣賞美女,除非...