7.python3实用编程技巧进阶(二)
发布时间:2020-12-20 10:59:52 所属栏目:Python 来源:网络整理
导读:1.5.如何根据字典中值的大小,对字典中的项进行排序 第一种方法:列表解析 # 1.5.如何根据字典中值的大小,对字典中的项进行排序 from random import randintd = {k: randint(60,100) for k in ‘ abcdefg ‘ } print (d) # 第一种方法:使用列表解析或者zip
1.5.如何根据字典中值的大小,对字典中的项进行排序第一种方法:列表解析 # 1.5.如何根据字典中值的大小,对字典中的项进行排序 from random import randint d = {k: randint(60,100) for k in ‘abcdefg‘} print(d) #第一种方法:使用列表解析或者zip()函数,把字典的keys和values反转过来 list1 = [(v,k) for k,v in d.items()] #或者使用zip()函数 # list2 = list(zip(d.values(),d.keys())) print(list1) list1 = sorted(list1,reverse=True) print(list1) 第二种使用sorted # 1.5.如何根据字典中值的大小,对字典中的项进行排序 from random import randint d = {k: randint(60,d.keys())) list1 = sorted(list1,reverse=True) #第二种方法:使用sorted排序 p = sorted(d.items(),key=lambda item:item[1],reverse=True) print(p) #[(‘a‘,97),(‘b‘,93),(‘d‘,(‘e‘,92),(‘f‘,76),(‘c‘,66),(‘g‘,61)] #对分数添加一个排名 d = {k:(i,v) for i,(k,v) in enumerate(p,1)} print(d) #{‘g‘: (1,‘d‘: (2,‘f‘: (3,91),‘c‘: (4,79),‘a‘: (5,78),‘e‘: (6,67),‘b‘: (7,64)} 1.6.如何统计序列中元素的频度# 1.6如何统计序列中元素的频度 from random import randint from collections import Counter data = [randint(1,5) for _ in range(1,20)] print(data) #[5,2,1,5,3,4,5] #计算频度最高的是三个数 c = Counter(data) print(c.most_common(3)) #[(1,5),(3,4),(2,4)] 1.7.如何快速找到多个字典中的公共键# 1.7.如何快速找到多个字典中的公共键 from random import randint,sample from functools import reduce d1 = {k:randint(1,4) for k in sample(‘abcdefgh‘,randint(3,6))} d2 = {k:randint(1,6))} d3 = {k:randint(1,6))} #1.使用字典的keys()方法,得到一个字典keys的集合 #2.使用map函数,得到每个字典keys的集合 #3.使用reduce,取所有字典keys集合的交集 dl = [d1,d2,d3] #找到三个字典中相同的keys result = reduce(lambda a,b: a & b,map(dict.keys,dl)) print(result) ?1.8.如何让字典保持有序# 1.8.如何让字典保持有序 from collections import OrderedDict from itertools import islice d = OrderedDict() d[‘e‘] = 5 d[‘d‘] = 4 d[‘c‘] = 3 d[‘b‘] = 2 d[‘a‘] = 1 print(d) #OrderedDict([(‘e‘,3),2),(‘a‘,1)]) #OrderedDict字典,在迭代操作时,它会保持元素被插入时的顺序 def query_by_order(d,a,b =None): if b is None: b = a + 1 return list(islice(d,b)) #第五个key res1 = query_by_order(d,4) print(res1) #[‘a‘] #第二个和第三个key res2 = query_by_order(d,3) print(res2) #[‘d‘,‘c‘] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |