关键词搜索

源码搜索 ×
×

python_字典列表嵌套的排序问题

发布2021-08-28浏览2996次

详情内容

上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来。

在说组合排序之前,先来看看排序有哪些函数。

排序函数

使用排序有两个可用方法,分别是sort()sorted()

  • sort():内置方法,会改变原来列表的排序、只适用于列表排序、所以效率高。
  • sorted():全局,可迭代任意对象(字符串,元组,列表,字典等)

sort()使用例子:

简单的使用:

  1. >>> L = [5,8,9,3,2,7]
  2. >>> L.sort()
  3. >>> print(L)
  4. [2, 3, 5, 7, 8, 9]

指定关键字的排序:

  1. ## 列表嵌套列表
  2. >>> user = [['Jone', '181', 30], ['Chan', '175', 26], ['Paul', '178', 22]]
  3. >>> user.sort(key=lambda user: user[2])
  4. >>> print(user)
  5. [['Paul', '178', 22], ['Chan', '175', 26], ['Jone', '181', 30]]

也可以用cmp函数实现,不过python教程3.0后为了语言简化和统一,已经被彻底移除,这里不再赘述。

sorted()使用例子:

排序任意对象:

  1. >>> A = 'Python'
  2. >>> print(sorted(A))
  3. ['P', 'h', 'n', 'o', 't', 'y']
  4. >>> print(A)
  5. Python
  6. >>>
  7. >>> B = (3, 6, 7, 2, 9)
  8. >>> print(sorted(B))
  9. [2, 3, 6, 7, 9]
  10. >>> print(B)
  11. (3, 6, 7, 2, 9)
  12. >>>
  13. >>> C = [3, 6, 7, 2, 9]
  14. >>> print(sorted(C))
  15. [2, 3, 6, 7, 9]
  16. >>> print(C)
  17. [3, 6, 7, 2, 9]
  18. >>>

根据键值的字典排序:

  1. ## 按照键值(value)排序
  2. >>> D = {'a': '3', 'b': '6', 'c': '2'}
  3. >>> ds = sorted(D.items(), key=lambda x: x[1], reverse=True)
  4. >>> print(ds)
  5. [('b', '6'), ('a', '3'), ('c', '2')]
  6. ## 按照键名(key)排序
  7. >>> D = {'a': '3', 'b': '6', 'c': '2'}
  8. >>> ds = sorted(D.items(), key=lambda x: x[0], reverse=True)
  9. >>> print(ds)
  10. [('c', '2'), ('b', '6'), ('a', '3')]

几种常见的排序场景

  1. 列表中嵌套字典,根据字典的值排序
  1. ## 使用lambda方式
  2. >>> D = [{"name": '张三', 'score': 68}, {'name': '李四', 'score': 97}]
  3. >>> ds = sorted(D, key=lambda x:x['score'], reverse=True)
  4. >>> print(ds)
  5. [{'name': '李四', 'score': 97}, {'name': '张三', 'score': 68}]
  6. >>>
  7. ## 使用operator方式
  8. >>> import operator
  9. >>> D = [{"name": '张三', 'score': 68}, {'name': '李四', 'score': 97}]
  10. >>> D.sort(key=operator.itemgetter('score'), reverse=True)
  11. >>> print(D)
  12. [{'name': '李四', 'score': 97}, {'name': '张三', 'score': 68}]
  13. >>>
  1. 列表中嵌套字典,键不同的情况下对值进行排序

可以将列表中的字典先放入到一个大字典中,对整个字典进行排序,在排序完成后,再转换为列表包含字典的形式即可。

  1. >>> from operator import itemgetter
  2. >>> dict_list = [{"ming": 87}, {"mei": 93}, {"hua": 68}, {"jon": 75}, {"ston": 100}, {"jack": 56}]
  3. >>> mid_dict = {key: value for x in dict_list for key, value in x.items()}
  4. >>> mid_list = sorted(mid_dict.items(), key=itemgetter(1))
  5. >>> print(mid_list)
  6. [('jack', 56), ('hua', 68), ('jon', 75), ('ming', 87), ('mei', 93), ('ston', 100)]
  7. >>> fin_list = [{x[0]: x[1]} for x in mid_list]
  8. >>> print(fin_list)
  9. [{'jack': 56}, {'hua': 68}, {'jon': 75}, {'ming': 87}, {'mei': 93}, {'ston': 100}]
  10. >>>
  1. 字典嵌套字典的排序:
  1. >>> D={10:{'aa':1,'bb':2},11:{'aa':2,'bb':0},12:{'aa':0,'bb':3}}
  2. >>> ds=sorted(D.items(), key=lambda x: x[1]['bb'])
  3. >>> print(ds)
  4. [(11, {'aa': 2, 'bb': 0}), (10, {'aa': 1, 'bb': 2}), (12, {'aa': 0, 'bb': 3})]
  5. >>>

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载