国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python利用公共鍵如何對字典列表進行排序詳解

2020-02-23 00:09:39
字體:
來源:轉載
供稿:網友

前言

在程序中使用字典進行數據信息統計時,由于字典是無序的所以打印字典時內容也是無序的。因此,為了使統計得到的結果更方便查看需要進行排序。Python中字典的排序分為按“鍵”排序和按“值”排序。下面話不多說了,來一起看看詳細的介紹吧

問題描述

我們有一個字典列表,想根據一個或多個字典中的值來對列表排序。

例如,有如下字典列表,根據字典中的x,由大到小排序這個列表:

l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]

解決方案

排序用sorted內置函數,關鍵字key參數用lambda表達式取出字典中x值作為排序依據,關鍵字reverse參數設置為True用來由大到小降序排序。

>>> l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]>>> l1 = sorted(l, key=lambda d:d['x'], reverse=True)>>> l1[{'y': 4, 'x': 3}, {'y': 3, 'x': 2}, {'y': 2, 'x': 1}]>>>

也可以用operator模塊中的itemgetter函數取出字典中某個鍵的值,作為排序依據。

>>> from operator import itemgetter>>> l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]>>> l2 = sorted(l, key=itemgetter('x'), reverse=True)>>> l2[{'y': 4, 'x': 3}, {'y': 3, 'x': 2}, {'y': 2, 'x': 1}]>>>

討論

函數operator.itemgetter()接受的參數可以作為查詢的標記,它可以是字典的鍵名稱、用數字表示的列表元素或是任何可以傳給對象的__getitem__()方法的值。如果傳多個標記給itemgetter() ,那么它產生的可調用對象將返回一個包含所有元素在內的元組,然后sorted()將根據對元組的排序結果來排列輸出結果。如果想同時針對多個字段做排序(比如x和y),那么這是非常有用的。

有時候會用lambda表達式來取代itemgetter()的功能。例如:

l_by_x = sorted(l, key=lambda d:d['x'])l_by_xy = sorted(l, key=lambda d:(d['x'], d['y']))

這種解決方案通常也能正常工作,但是用itemgetter()通常會運行得更快一些。因此如果要考慮性能問題的話,應該使用itemgetter()

l_by_x = sorted(l, key=itemgetter('x'))l_by_xy = sorted(l, key=itemgetter('x', 'y'))

最后不要忘了本文中展示的技術同樣適用于min()max()函數。例如:

>>> min(l, key=itemgetter('x')){'y': 2, 'x': 1}>>> max(l, key=itemgetter('x', 'y')){'y': 4, 'x': 3}>>> max(l, key=itemgetter('x')){'y': 4, 'x': 3}>>>

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林站長站的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄冈市| 牙克石市| 香港 | 保德县| 彰化县| 本溪| 常宁市| 吉林市| 敦煌市| 江永县| 文昌市| 东乡| 扎鲁特旗| 东明县| 昆明市| 深圳市| 常宁市| 梁山县| 新泰市| 赞皇县| 阳城县| 安国市| 石渠县| 武城县| 景德镇市| 焦作市| 本溪| 综艺| 上犹县| 双桥区| 若尔盖县| 内丘县| 鄯善县| 四会市| 绥中县| 铁岭县| 永新县| 琼海市| 甘德县| 静海县| 洪江市|