python排序基础 ---字典排序

场景
某个列表中包含多个数字,有些数字会有重复,现在需要统计每个数字重复的次数,并且根据重复的次数降序排列这些数字

思考
既然要统计重复次数,并且还需要根据重复次数排序,既包括了元素,还包括重复次数。

具体步骤如下:
(1)生成随机数,使用random模块中的randint函数 (2)将数据导入字典(附带会统计数字重复次数) (3)字典中的(k,v)值映射的是(数值,重复次数),因此需要根据重复次数排序的话就相当于根据字典的value排序了,根据value排序有两种方式:
	- 将字典的KV对互换位置,然后使用sorted排序算法默认对字典的key进行排序
	- 使用匿名函数,自定义排序方式

随机数字典

import random
def get_num(m,n):
	num_dict={}
	for _ in range(m):
		num=random.randint(1, n)
		if num not in num_dict:
			num_dict[num] = 1  #第一次添加至字典的元素,设置重复次数为1
		else:
			num_dict[num]+=1  #后续重复的逐步加1
	return num_dict     

(一) 字典倒装排序

#因为字典的value值也有可能重复,因此在进行倒装时不能简单地将kv互换,将value相同的key都放入一个列表中,
#并且将value作为key,将列表作为value,最后再根据后来的key进行排序

def sort_dict(d):
	temp={} ##先定义一个临时字典,用于存放倒装后的字典
	for k,v in d.items():
		temp.setdefault=(v,[])  #根据重复次数来建立kv对
		temp[v].append(k)       #将重复次数都一样的数字都放入列表中
	resv=[(k,v) for v in sorted(temp,reverse=True) for k in temp[v]] #对倒装后的字典进行倒序排序,此时重复次数作为key	
	return resv                                                      #按照key进行排序,key最大的排在前面
	                                                                 #然后再使用解析式重新生成一个列表,列表中的元素都是二元组
	                                                                 #元组的第一个元素是数字,第二个元素是重复次数

因此,完整的代码为:

import random
def get_num(m,n):
	num_dict={}
	for _ in range(m):
		num=random.randint(1, n)
		if num not in num_dict:
			num_dict[num] = 1  #第一次添加至字典的元素,设置重复次数为1
		else:
			num_dict[num]+=1  #后续重复的逐步加1
	return num_dict 
	
def sort_dict(d):
	temp={} ##先定义一个临时字典,用于存放倒装后的字典
	for k,v in d.items():
		temp.setdefault(v,[])  #根据重复次数来建立kv对
		temp[v].append(k)       #将重复次数都一样的数字都放入列表中
	resv=[(k,v) for v in sorted(temp,reverse=True) for k in temp[v]]						
	return resv 

m=int(input('随机数个数为:'))
n=int(input('随机数范围是0~?:'))
sort_dict(get_num(m,n))

(二)匿名函数排序

resv=sorted(num_dict.items() key=lambda num_dict:num_dict[1],reverse=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值