你有乙個字典列表,你想根據某個或某幾個字典欄位來排序這個列表。
根據任意的字典欄位來排序輸入結果行是很容易實現的,**示例:rows =[,
,,]
**的輸出如下:from operator import itemgetter
rows_by_fname =
sorted
(rows, key=itemgetter(
'fname'))
rows_by_uid =
sorted
(rows, key=itemgetter(
'uid'))
(rows_by_fname)
(rows_by_uid)
itemgetter() 函式也支援多個 keys,比如下面的**[,,
,][,
,,]
會產生如下的輸出:rows_by_lfname =
sorted
(rows, key=itemgetter(
'lname'
,'fname'))
(rows_by_lfname)
在上面例子中, rows 被傳遞給接受乙個關鍵字引數的 sorted() 內建函式。這個[,,
,]
引數是 callable 型別,並且從 rows 中接受乙個單一元素,然後返回被用來排序的值。
itemgetter() 函式就是負責建立這個 callable 物件的。
operator.itemgetter() 函式有乙個被 rows 中的記錄用來查詢值的索引引數。可
以是乙個字典鍵名稱,乙個整形值或者任何能夠傳入乙個物件的 getitem () 方法的
值。如果你傳入多個索引引數給 itemgetter() ,它生成的 callable 物件會返回乙個
包含所有元素值的元組,並且 sorted() 函式會根據這個元組中元素順序去排序。但你
想要同時在幾個字段上面進行排序 (比如通過姓和名來排序,也就是例子中的那樣) 的
時候這種方法是很有用的。
itemgetter() 有時候也可以用 lambda 表示式代替,比如:
這種方案也不錯。但是,使用 itemgetter() 方式會執行的稍微快點。因此,如果rows_by_fname =
sorted
(rows, key=
lambda r: r[
'fname'])
rows_by_lfname =
sorted
(rows, key=
lambda r:
(r['lname'
],r[
'fname'])
)
你對效能要求比較高的話就使用 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 寫。可能 不是非常簡潔高效,但是,目前測試功能正常。以後我會慢慢改進學習的。下面是完整 我準備放到我的期末作業裡面用。小愉悅...
累就乙個字
最近也學了一把跳槽,新公司坐落在北師大校園裡,環境是一流,可惜就是遠過頭了,一天就要浪費兩個小時在車上,比以前還慘。值得安慰的是公司坐落在學校裡,每天在校園裡看到那些青春活力的學生,也會覺得自己年輕了好幾歲,感覺非常棒。最重要的是北師大靚女成群,真是大飽眼福啊 別鄙視咱,哪個男人不喜歡欣賞美女,除非...