字典的元素是成鍵值對出現的,直接對字典使用sorted() 排序,它是根據字典的鍵的ASCII編碼順序進行排序,要想讓字典根據值的大小來排序,可以有兩種方法來實現:
一、利用zip函數將字典數據轉化為元組再用sorted() 排序
1 from random import randint 2 # 用隨機函數生成待排序的字典數據
3 my_dict = {x: randint(60, 100) for x in 'abcxyzgkj'} 4 # 將字典數據轉化為元組,把字典的值作為元組的第0項,鍵作為元組的第1項
5 my_tuple = zip(my_dict.values(), my_dict.keys()) 6 # 打印輸出排序后的結果
7 print(sorted(my_tuple))
二、傳遞sorted函數的key參數指定為字典的值
sorted函數的格式:sorted(iterable,key,reverse),sorted有iterable,key,reverse三個參數。
iterable 表示可以迭代的對象,例如可以是dict.items()、dict.keys()等。
key 是一個函數,通常使用使用lambda匿名函數來實現,用來選取參與比較的元素。
reverse 用來指定按倒序還是順序排序,reverse=True是倒序,reverse=False是順序,默認reverse=False。
1 from random import randint 2 # 用隨機函數生成待排序的字典數據
3 my_dict = {x: randint(60, 100) for x in 'abcxyzgkj'} 4 # 把my_dict.items()所得列表中每個元組的第二個元素(value)傳到lambda函數進行排序
5 result = sorted(my_dict.items(), key=lambda x: x[1]) # x[0]是字典的鍵,x[1]是字典的值 6 # 打印輸出排序后的結果
7 print(result)
第一種方法是對字典中鍵值的全面比較,先比較值的大小,如果兩者相等會接着比較鍵的大小來排序;第二種方法只比較指定的值的大小,如果兩者相等則不會比較鍵的大小,只依照順序來排序。
