如何对字典值进行排序?求按年龄排序字典的实现方法
按年龄排序字典的解决方案
嘿,这事儿不难!你手里的是一个包含多个用户字典的大字典,要按age字段排序的话,用Python的sorted()函数就搞定了,我给你一步步讲清楚:
首先先确认你的原始字典结构应该是这样的(我帮你规整了下):
d = { 1: {'name':'ste', 'surname':'pnt', 'age':21}, 2: {'name':'test', 'surname':'black','age':24}, 3: {'name':'check', 'surname':'try', 'age':41} }
方法1:只排序用户信息(不带原始键)
如果你只需要按年龄排序后的用户字典列表,直接对字典的值排序就行,指定排序依据为每个用户的age:
# 升序排序(从小到大) sorted_users_asc = sorted(d.values(), key=lambda user: user['age']) # 降序排序(从大到小),加个reverse=True就行 sorted_users_desc = sorted(d.values(), key=lambda user: user['age'], reverse=True)
要输出的话,直接遍历这个排序后的列表:
for user in sorted_users_asc: print(user)
方法2:保留原始键(1、2、3)一起排序
如果想连带着原始的键(比如1、2、3)一起排序,那就对字典的键值对排序,同样指定key为用户字典的age:
# 升序排序键值对 sorted_items_asc = sorted(d.items(), key=lambda item: item[1]['age']) # 降序排序 sorted_items_desc = sorted(d.items(), key=lambda item: item[1]['age'], reverse=True)
然后用你原来的for循环方式输出就可以:
for k, v in sorted_items_asc: print(k, v)
小解释
这里的lambda是个匿名函数,用来告诉sorted()函数“按什么规则排序”:
- 对于
d.values()的排序,lambda user: user['age']就是说“拿每个用户字典里的age值来比大小” - 对于
d.items()的排序,lambda item: item[1]['age']是说“拿每个键值对里的第二个元素(也就是用户字典)的age值来比大小”
举个升序输出的例子,你会得到:
1 {'name':'ste', 'surname':'pnt', 'age':21}
2 {'name':'test', 'surname':'black','age':24}
3 {'name':'check', 'surname':'try', 'age':41}
这样就完美按年龄排好啦!
内容的提问来源于stack exchange,提问作者S. Pnt
相关产品推荐
相关产品推荐

