python的sorted函数对字典按value进行排序

    技术2022-07-20  70

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

    Processed: 0.018, SQL: 9