特定字段排序
对于包含字符+数字的值信息,如果希望按照值中的数字字段对字典排序,可以结合正则表达式处理
例如:处理一个带有如下信息的字典排序
ori_dict = {
'肖申克的救赎': '评分:9.7',
'霸王别姬': '评分:9.6',
'阿甘正传': '评分:9.5',
'美丽人生': '评分:9.6',
'泰坦尼克号': '评分:9.4',
'楚门的世界': '评分:9.3',
'疯狂动物城': '评分:9.2',
'触不可及': '评分:9.3',
'三傻大闹宝莱坞': '评分:9.2'}
# 处理方法
# 导入模块 re
import re
# 原始字典
ori_dict = {
'肖申克的救赎': '评分:9.7',
'霸王别姬': '评分:9.6',
'阿甘正传': '评分:9.5',
'美丽人生': '评分:9.6',
'泰坦尼克号': '评分:9.4',
'楚门的世界': '评分:9.3',
'疯狂动物城': '评分:9.2',
'触不可及': '评分:9.3',
'三傻大闹宝莱坞': '评分:9.2'}
# 使用 sorted() 排序(排序后为列表格式),并转换为字典格式,
# re.sub() 将无关的字符替换为空
# 将数字转换为对应的数字类型 float/int
# 使用 lambda() 匿名函数对所有的值进行快速处理
# key 指定用于排序的关键字
# ori_dict.items()获取字典键值信息,传入value中,value[0]表示键,value[1]表示值
# reverse = True 表示降序排序,不写默认升序排序
# 降序
sorted_dict = dict(sorted(ori_dict.items(), key=lambda value: float(re.sub('评分:', '', value[1])), reverse=True))
# 升序
# sorted_dict = dict(sorted(ori_dict.items(), key=lambda value: float(re.sub('评分:', '', value[1]))))
print('ori_dict:')
for k,v in ori_dict.items():
print('{}:{}'.format(k,v))
print('\nsorted_dict:')
for k,v in sorted_dict.items():
print('{}:{}'.format(k,v))
结果
ori_dict:
肖申克的救赎:评分:9.7
霸王别姬:评分:9.6
阿甘正传:评分:9.5
美丽人生:评分:9.6
泰坦尼克号:评分:9.4
楚门的世界:评分:9.3
疯狂动物城:评分:9.2
触不可及:评分:9.3
三傻大闹宝莱坞:评分:9.2
sorted_dict:
肖申克的救赎:评分:9.7
霸王别姬:评分:9.6
美丽人生:评分:9.6
阿甘正传:评分:9.5
泰坦尼克号:评分:9.4
楚门的世界:评分:9.3
触不可及:评分:9.3
疯狂动物城:评分:9.2
三傻大闹宝莱坞:评分:9.2