python的sorted函數對字典按value進行排序_CodingPark編程公園

sort函數

如果對python中的列表進行排序,可以使用List類的成員函數sort,該函數會在原空間上進行操作,對列表本身進行修改不返回副本
語法如下:

  L.sort(cmp=None, key=None, reverse=False)

對列表本身進行修改

sorted函數

sorted函數就比sort函數要強大許多了,sort只能對列表進行排序
sorted可以對 所有可迭代類型 進行排序,並且返回新的已排序的列表。語法如下:

  xxx = sorted(iterable, cmp=None, key=None, reverse=False) 

返回新的已排序副本,原始輸入不變

基礎知識

iterable:是可迭代類型;
cmp:用於比較的函數,比較什麼由key決定;
key:用列表元素的某個屬性或函數進行作爲關鍵字,有默認值,迭代集合中的一項;
reverse:排序規則. reverse = True 降序 或者 reverse = False 升序,有默認值。
返回值:是一個經過排序的可迭代類型,與iterable一樣。

參數說明:
(1) cmp參數
cmp接受一個函數,拿整形舉例,形式爲:
def f(a,b):
return a-b
如果排序的元素是其他類型的,如果a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就行了

(2) key參數
key也是接受一個函數,不同的是,這個函數只接受一個元素,形式如下
def f(a):
return len(a)
key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序

(3) reverse參數
接受False 或者True 表示是否逆序

💡可迭代元素經常會用到 items()
items() 是字典中的一個方法,返回由元組組成的列表。

💡比較函數經常會用到operator.itemgetter函數
operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數爲一些序號。


>>> a = {"tuffy":2, "spike":10, "tom":8, "tyke":3, "jerry":7 }

>>> print a.items()  #使用items()或者iteritems()先將字典轉換爲二元組的列表

>>> [('tom', 8), ('spike', 10), ('tyke', 3), ('jerry', 7), ('tuffy', 2)]

>>> from operator import itemgetter

>>>c = sorted(a.items(),key=itemgetter(1))

>>>print c

>>>[('tuffy', 2), ('tyke', 3), ('jerry', 7), ('tom', 8), ('spike', 10)]

項目例子


from collections import defaultdict
import Target
import de_weight
import Similarity_for_TextRank_genesis as Sim
from operator import itemgetter
from tqdm import tqdm


Titlewords, TitlewordsPlus = Target.getTitle()
print('Titlewords -> ', Titlewords)
print('TitlewordsPlus -> ', TitlewordsPlus)

TitlewordsAll = Titlewords + TitlewordsPlus     # 拿到了標題總內容(包括衍生詞)
print('TitlewordsAll -> ', TitlewordsAll)

Content4Title = defaultdict(int)
de_content = de_weight.getDeTarget()
print('de_content -> ', de_content)

for i in tqdm(TitlewordsAll):
    for j in tqdm(de_content):
        Content4Title[(i, j)] = Sim.checkIt(i, j)

Content4Title.items()
Sort_Content4Title = sorted(Content4Title.items(), key=itemgetter(1), reverse=True)
print()
print('=====結果展示=====')
print(Sort_Content4Title)
# print(sorted(Content4Title, key=Content4Title[(i, j)], reverse=True))

mid_Content4Title = []      # 存儲最終的內容
for x in Sort_Content4Title:
    # print('x -> ', x)
    if x[0][1] not in mid_Content4Title:
        mid_Content4Title.append(x[0][1])
print()
print('mid_Content4Title -> ', mid_Content4Title)
fin_Content4Title = mid_Content4Title[:30]
print('fin_Content4Title -> ', fin_Content4Title)
fin_Content4Title = ','.join(fin_Content4Title)

def Content4TextRank():
    f = open('/Users/atom-g/CodingPark622/DanMu/Content4TextRank_QianZhai_WSC.txt', 'w', encoding='UTF-8')
    f.write(fin_Content4Title)
    f.flush()  # 不是必須加,用f.flush()強制把緩衝區裏面的數據寫到磁盤上。
    f.close()


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章