每日一python(4):python對字典按key排序和按value排序
阿新 • • 發佈:2019-01-12
1、首先介紹一下字典的基本用法
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
print(d.keys())
print(d.values())
print(d.items())
sum = 0
for key, value in d.items():
sum = sum + value
print(key, ':', value)
print('平均分:', sum/len(d))
列印結果如下:
dict_keys(['Bart', 'Lisa', 'Paul', 'Adam']) dict_values([59, 85, 74, 95]) dict_items([('Bart', 59), ('Lisa', 85), ('Paul', 74), ('Adam', 95)]) Bart : 59 Lisa : 85 Paul : 74 Adam : 95 平均分: 78.25
可以看到,items() 方法把dict物件轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value<
2、再來介紹一下sorted函式
sorted函式,語法:sorted(iterable,key,reverse),sorted一共有 iterable,key,reverse 這三個引數,其中:
- iterable表示可以迭代的物件,例如可以是dict.items()、dict.keys()等,
- key是一個函式,用來選取參與比較的元素,
- reverse則是用來指定排序是倒序還是順序,reverse=true則是倒序,reverse=false時則是順序,預設時reverse=false
3、使用sorted函式對字典分別按key和按value進行排序
#coding:utf-8
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
print (sorted(d.items(), key=lambda d: d[0])) # 按照key進行排序
print (sorted(d.items(), key=lambda d: d[1])) # 按照value進行排序
結果:
[('Adam', 95), ('Bart', 59), ('Lisa', 85), ('Paul', 74)] [('Bart', 59), ('Paul', 74), ('Lisa', 85), ('Adam', 95)]
這裡的d.items()實際上是將d轉換為可迭代物件,迭代物件的元素為 (‘Adam’,95)、(‘Lisa’,85)、(‘Bart’,59)、(‘Paul’,74),items()方法將字典的元素 轉化為了元組,而這裡key引數對應的lambda表示式的意思則是選取元組中的第幾個元素作為比較引數
4、應用:如何統計陣列中出現次數最多的資料,按出現次數由大到小排序
- - 第1步:去重
- - 第2步:計算每個物件在list裡面出現的次數,儲存為dict
- - 第3步:儲存為字典後,按字典的value值大小排序(由於dict是無序的,所以只能用list去排序,把dict的key和value儲存為tuplue物件)
ll = ["a", "b", "a", "c", "a", "c", "b", "d", "e", "c", "a", "c"]
# 第1步:去重
duixiang = set(ll) # 先去重,取出計數物件
# 第2步:計算每個物件在list裡面出現的次數,儲存為dict
dic = {}
for i in duixiang:
dic[i] = ll.count(i) # count()方法用於統計某個元素在列表中出現的次數。
# 第3步:儲存為字典後,按字典的value值大小排序
# 由於dict是無序的,所以只能用list去排序,把dict的key和value儲存為tuplue物件
ll = sorted(dic.items(), key=lambda x: x[1], reverse=True)
print(ll)
結果:
[('c', 4), ('a', 4), ('b', 2), ('d', 1), ('e', 1)]