当前位置: 首页 > news >正文

对字典按值进行“排序”:sorted()、items()及lambda函数联合使用

对字典按值排序的核心是利用 sorted() 函数,结合字典的 items() 方法(获取键值对)和 key 参数(指定按值排序)。以下通过两个具体场景举例说明:

场景1:统计商品销量并按销量排序

假设我们有一个记录商品销量的字典,需要按销量从高到低(降序)或从低到高(升序)排列。

# 定义商品销量字典:键是商品名,值是销量
product_sales = {"苹果": 150,"香蕉": 200,"橙子": 120,"葡萄": 180
}# 1. 按销量降序排序(从高到低)
sorted_by_sales_desc = sorted(product_sales.items(),  # 转换为键值对元组列表:[("苹果", 150), ("香蕉", 200), ...]key=lambda x: x[1],    # 按元组的第二个元素(销量)排序reverse=True           # 降序(默认是False,升序)
)# 2. 按销量升序排序(从低到高)
sorted_by_sales_asc = sorted(product_sales.items(),key=lambda x: x[1],    # 同样按销量排序reverse=False          # 升序(可省略,默认就是False)
)print("按销量降序:", sorted_by_sales_desc)
print("按销量升序:", sorted_by_sales_asc)

输出结果

按销量降序:[('香蕉', 200), ('葡萄', 180), ('苹果', 150), ('橙子', 120)]
按销量升序:[('橙子', 120), ('苹果', 150), ('葡萄', 180), ('香蕉', 200)]

场景2:统计用户活跃度并按次数排序

假设我们有一个记录用户登录次数的字典,需要按登录次数排序,找出最活跃和最不活跃的用户。

# 定义用户登录次数字典:键是用户名,值是登录次数
user_activity = {"user1": 8,"user2": 3,"user3": 12,"user4": 5,"user5": 12  # 与user3登录次数相同
}# 按登录次数降序排序(次数相同则按原始顺序排列)
sorted_users = sorted(user_activity.items(),key=lambda x: x[1],reverse=True
)print("按登录次数降序:", sorted_users)
# 输出:[('user3', 12), ('user5', 12), ('user1', 8), ('user4', 5), ('user2', 3)]# 提取最活跃的用户(前两名)
most_active = sorted_users[:2]
print("最活跃的用户:", most_active)  # 输出:[('user3', 12), ('user5', 12)]

说明

  1. items() 方法:将字典 {key: value} 转换为 [(key1, value1), (key2, value2), ...] 的元组列表,这是排序的前提(sorted() 需接收可迭代对象)。
  2. key=lambda x: x[1]x 代表列表中的每个元组 (key, value)x[1] 表示按元组的第二个元素(即字典的“值”)作为排序依据。
  3. reverse 参数:控制排序方向,reverse=True 为降序(大→小),reverse=False 为升序(小→大,默认)。
  4. 排序结果:返回的是列表(不再是字典),因为字典在 Python 3.7+ 虽有插入顺序,但排序后需要明确的序列结构,方便后续按顺序处理(如取前N名)。

通过这种方法,能快速对字典的“值”进行排序,适用于各类统计场景(如销量、次数、评分等),帮助提取关键信息(如最大值、最小值、Top N等)。

附:字典中的“序”

在 Python 中,字典的“有序性”取决于 Python 版本,且其“序”的定义与“键”或“值”的大小无关,而是与插入顺序相关:

1. 字典的有序性历史
  • Python 3.6 及之前:字典是无序的。遍历字典时,键值对的顺序不固定,与插入顺序无关(底层哈希表实现导致)。
  • Python 3.7 及之后:字典被官方规范为有序的,会严格保留键值对的插入顺序。遍历字典时,顺序与插入时的先后顺序一致。
2. 字典的“序”:按插入顺序,而非键/值

Python 3.7+ 中字典的“有序”,指的是记住键值对被插入的先后顺序,而不是按“键的大小”或“值的大小”排序。

示例(Python 3.7+):
# 按插入顺序添加键值对
my_dict = {"b": 2,"a": 1,"c": 3
}# 遍历字典,输出顺序与插入顺序一致
for key, value in my_dict.items():print(key, value)

输出结果(与插入顺序相同):

b 2
a 1
c 3

可以看到:

  • 键的顺序是 b → a → c(插入顺序),而非按键的字母顺序(a → b → c);
  • 也非按值的大小顺序(1 → 2 → 3)。
3. 与“排序”的区别

字典的“有序”(插入顺序)≠ “排序”(按键/值规则排列):

  • 有序:被动保留插入时的顺序,不会主动调整。
  • 排序:需要通过 sorted() 等方法主动按规则(键、值或自定义逻辑)重新排列,得到的是列表(不再是字典)。

例如,对上面的 my_dict 按“键的字母顺序”排序:

# 按键排序(得到列表,非字典)
sorted_by_key = sorted(my_dict.items(), key=lambda x: x[0])
print(sorted_by_key)  # 输出:[('a', 1), ('b', 2), ('c', 3)]
http://www.dtcms.com/a/439783.html

相关文章:

  • 搜狗网站入口域名网站建设方案
  • 拼多多网站怎么做淄博圻谷网站建设制作
  • 天水网站建设公司网页设计作品集展示
  • 天津网站建设noajt嘉兴做网站seo
  • 国企网站建设标准世界工厂网优质货源
  • 温州专业微网站制作报价德阳做网站的公司
  • 免费的招聘平台有哪些企业网站优化外包
  • 长春建网站公司原始传奇网页版
  • 邵阳建网站网站更改备案
  • 【Leetcode hot 100】22.括号生成
  • 专业刷粉网站nginx缓存方案 WordPress
  • 企业网站买卖建设流程笑话类网站用什么做
  • 位置编码(Positional Encoding)理解与误区
  • 排名好的宜昌网站建设手机赚钱一天400元
  • 德州企业网站建设wap是什么意思卡老师
  • 网站备案核验单清晰wordpress首页没有ssl
  • 网站建设方案免费下载多伦多网站建设多少钱
  • 网站空间去哪里买的网站建设 响应式
  • 专业新站整站快速排名公司网站制作目标及要求
  • 网站设计初步规划商城网站有什么好处
  • 网站做微信链接怎么做的火花机 东莞网站建设
  • 网站做文件检查seo推广方式是什么呢
  • 信息图制作网站中文wordpress企业主题
  • 美发企业网站模板数字货币交易网站开发
  • 手机微信网站怎么做的青海seo关键词排名优化工具
  • 【系统开发】前端 HTML基础
  • 网站续费管理系统广告设计与制作自我评价
  • 唐山网站建设互众动力网页制作模板软件
  • 网站 图片防盗链免费观看电影电视剧的软件
  • pycharm网站开发实例建筑工程网上举报平台官网