您现在的位置是: 网站首页 >Python Python

Python基础---字典排序,获取字典中最值对应的键

admin2019年1月10日 15:11 Python 1056人已围观

# 字典排序 ## 使用itemgetter按字典值排序 默认为升序 ```python import operator d = {'a': 4, 'b': 1, 'c': 3, 'd': 2} # 升序排列 sorted_d = sorted(d.items(), key=operator.itemgetter(1)) print(sorted_d) # [('b', 1), ('d', 2), ('c', 3), ('a', 4)] # 降序排列 sorted_d_rv = sorted(d.items(), key=operator.itemgetter(1), reverse=True) print(sorted_d_rv) # [('a', 4), ('c', 3), ('d', 2), ('b', 1)] sorted_d.reverse() # 直接使用list的reverse方法将sorted_x顺序反转,会改变原列表 print(sorted_d) # [('a', 4), ('c', 3), ('d', 2), ('b', 1)] ``` ## 使用lambda按字典值排序 ```python d = {'a': 4, 'b': 1, 'c': 3, 'd': 2} # 升序排列 sorted_d = sorted(d.items(), key=lambda x: x[1]) print(sorted_d) # [('b', 1), ('d', 2), ('c', 3), ('a', 4)] # 降序排列 sorted_d_rv = sorted(d.items(), key=lambda x: x[1], reverse=True) print(sorted_d_rv) # [('a', 4), ('c', 3), ('d', 2), ('b', 1)] ``` ## 使用itemgetter包含字典的列表排序 ```python import operator ld = [{'name': 'lr', 'age': 26}, {'name': 'ly', 'age': 25}] # 按照name键升序排列 sorted_ld = sorted(ld, key=operator.itemgetter('name')) print(sorted_ld) # [{'name': 'lr', 'age': 26}, {'name': 'ly', 'age': 25}] sorted_ld = sorted(ld, key=operator.itemgetter('age')) print(sorted_ld) # [{'name': 'ly', 'age': 25}, {'name': 'lr', 'age': 26}] # 按照name键降序排列 sorted_ld_rv = sorted(ld, key=operator.itemgetter('name'), reverse=True) print(sorted_ld_rv) #[{'name': 'ly', 'age': 25}, {'name': 'lr', 'age': 26}] ``` ## 使用lambda包含字典的列表排序 ```python ld = [{'name': 'lr', 'age': 26}, {'name': 'ly', 'age': 25}] # 升序排列 sorted_ld = sorted(ld, key=lambda x: x['name']) print(sorted_ld) # [{'name': 'lr', 'age': 26}, {'name': 'ly', 'age': 25}] # 降序排列 sorted_ld_rv = sorted(ld, key=lambda x: x['name'], reverse=True) print(sorted_ld_rv) # [{'name': 'ly', 'age': 25}, {'name': 'lr', 'age': 26}] ``` ## 包含字典的列表使用多条件排序 使用`lambda` ```python net_speed = [{'ip': '192.168.96.22', 'net_in': 23.6, 'net_out': 116}, {'ip': '192.168.96.21', 'net_in': 68, 'net_out': 0.6}, {'ip': '192.168.96.23', 'net_in': 45.2, 'net_out': 3056}] sorted_net_speed = sorted(net_speed, key=lambda x: x['net_out']) print(sorted_net_speed) # [{'ip': '192.168.96.21', 'net_in': 68, 'net_out': 0.6}, {'ip': '192.168.96.22', 'net_in': 23.6, 'net_out': 116}, {'ip': '192.168.96.23', 'net_in': 45.2, 'net_out': 3056}] sorted_net_speed = sorted(net_speed, key=lambda x: (x['net_out'], x['ip'])) # 括号里面添加多个条件 print(sorted_net_speed) # [{'ip': '192.168.96.21', 'net_in': 68, 'net_out': 0.6}, {'ip': '192.168.96.22', 'net_in': 23.6, 'net_out': 116}, {'ip': '192.168.96.23', 'net_in': 45.2, 'net_out': 3056}] ``` 使用`itemgetter` ```python from operator import itemgetter sorted_net_speed = sorted(net_speed, key=itemgetter('net_out', 'ip'), reverse=True) # 按照net_out、ip多条件倒序 print(sorted_net_speed) # [{'ip': '192.168.96.23', 'net_in': 45.2, 'net_out': 3056}, {'ip': '192.168.96.22', 'net_in': 23.6, 'net_out': 116}, {'ip': '192.168.96.21', 'net_in': 68, 'net_out': 0.6}] ``` ## 按照字典值排序,并返回排序后的keys ```python a = {"a": 1, "c": 2, "b": 3, "d": 0} b = a.keys() print(b) # dict_keys(['a', 'c', 'b', 'd']) list_b = list(b) # 需要先转换为列表,才能进行排序 list_b.sort(key=a.__getitem__) print(list_b) # ['d', 'a', 'c', 'b'] ``` ## 获取字典中最值对应的键 1. 利用`min(dict, key=dict.get)`,得到键 ```python >>> d = {1:1, 2:0, 3:2} {1: 1, 2: 0, 3: 2} >>> min(d, key=d.get) 2 ``` 2. 利用lambda函数 ```python >>> min(d.items(), key=lambda x: x[1]) # 得到键值元组 (2, 0) >>> min(d, key=lambda x: d[x]) 2 ``` 字典的值仍为字典去最值 ```python print('Samba列表:', samba_speed_all) # {'192.168.96.21': {'net_in': 2.64, 'net_out': 0.38}, '192.168.96.22': {'net_in': 2.48, 'net_out': 0.4}} min_speed_samba = min(samba_speed_all.items(), key=lambda x: x[1]['net_out']) # ('192.168.96.21', {'net_in': 2.64, 'net_out': 0.38}) # 获取出口速度最小的Samba服务器IP samba_user_ip = min(samba_speed_all, key=lambda x: samba_speed_all[x]['net_out']) # 192.168.96.21 print('出口速度最小:', samba_user_ip) ```

很赞哦! (0)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2247天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:60 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站