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, 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())) list1 = sorted(list1,reverse=True) #第二种方法:使用sorted排序 p = sorted(d.items(),key=lambda item:item[1],reverse=True) print(p) #[('a', 97), ('b', 93), ('d', 93), ('e', 92), ('f', 76), ('c', 66), ('g', 61)] #对分数添加一个排名 d = {k:(i,v) for i, (k,v) in enumerate(p,1)} print(d) #{'g': (1, 97), 'd': (2, 92), '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, 2, 5, 3, 1, 1, 1, 4, 2, 5, 3, 2, 3, 5, 1, 2, 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,4) for k in sample('abcdefgh',randint(3,6))} d3 = {k:randint(1,4) for k in sample('abcdefgh',randint(3,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', 5), ('d', 4), ('c', 3), ('b', 2), ('a', 1)]) #OrderedDict字典,在迭代操作时,它会保持元素被插入时的顺序 def query_by_order(d, a, b =None): if b is None: b = a + 1 return list(islice(d,a,b)) #第五个key res1 = query_by_order(d,4) print(res1) #['a'] #第二个和第三个key res2 = query_by_order(d,1,3) print(res2) #['d', 'c']