1. 程式人生 > >每日一python(4):python對字典按key排序和按value排序

每日一python(4):python對字典按key排序和按value排序

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)]