Python 字典 列表 嵌套 复杂排序大全

https://blog.csdn.net/ray_up/article/details/42084863

一: 字典排序

解析: 使用sorted 方法, 排序后的结果为一个元组. 可以字符串排序(那数字肯定更没问题了!)

1:  按照键值(value)排序

a = {‘a‘: ‘China‘, ‘c‘: ‘USA‘, ‘b‘: ‘Russia‘, ‘d‘: ‘Canada‘}
b = sorted(a.items(), key=lambda x: x[1], reverse=True)
结果:
[(‘c‘, ‘USA‘), (‘b‘, ‘Russia‘), (‘a‘, ‘China‘), (‘d‘, ‘Canada‘)]
2: 按照键名(key)排序
a = {‘a‘: ‘China‘, ‘c‘: ‘USA‘, ‘b‘: ‘Russia‘, ‘d‘: ‘Canada‘}
b = sorted(a.items(), key=lambda x: x[0], reverse=True)
结果:
[(‘d‘, ‘Canada‘), (‘c‘, ‘USA‘), (‘b‘, ‘Russia‘), (‘a‘, ‘China‘)]
3: 嵌套字典, 按照字典键名(key)排序
a = {‘a‘: {‘b‘: ‘China‘}, ‘c‘: {‘d‘: ‘USA‘}, ‘b‘: {‘c‘: ‘Russia‘}, ‘d‘: {‘a‘: ‘Canada‘}}
b = sorted(a.items(), key=lambda x: x[1], reverse=True)
结果:
[(‘c‘, {‘d‘: ‘USA‘}), (‘b‘, {‘c‘: ‘Russia‘}), (‘a‘, {‘b‘: ‘China‘}), (‘d‘, {‘a‘: ‘Canada‘})]
4: 嵌套列表, 针对列表第一个元素排序( 其实直接写 x: x[1] 就是按照第一个值排序. )
a = {‘a‘: [1, 3], ‘c‘: [3, 4], ‘b‘: [0, 2], ‘d‘: [2, 1]}
b = sorted(a.items(), key=lambda x: x[1][0], reverse=True)
结果:
[(‘c‘, [3, 4]), (‘d‘, [2, 1]), (‘a‘, [1, 3]), (‘b‘, [0, 2])]
4-2: 嵌套列表, 按照列表其他元素排序  只需要修改列表对应的下标
a = {‘a‘: [1, 3], ‘c‘: [3, 4], ‘b‘: [0, 2], ‘d‘: [2, 1]}
b = sorted(a.items(), key=lambda x: x[1][1], reverse=True)
结果:
[(‘c‘, [3, 4]), (‘a‘, [1, 3]), (‘b‘, [0, 2]), (‘d‘, [2, 1])]
总结:  此处使用lambda方法, x: x[1][1] 就可以看做是在访问字典的值, 想要按照哪个数值排序, 用相应的坐标对应即可, 但当字典过于复杂后, 应该选择用元组存储, 简化排序过程.

===========================列表排序========================
二: 列表排序

1: 按照字母排序

a = [‘USA‘, ‘China‘, ‘Canada‘, ‘Russia‘]
a.sort(reverse=True)
结果:
[‘USA‘, ‘Russia‘, ‘China‘, ‘Canada‘]
2; 嵌套列表的排序, 按照子列表的其他值排序雷系, 修改x[0] 这里的下标即可

a = [[‘USA‘, ‘b‘], [‘China‘, ‘c‘], [‘Canada‘, ‘d‘], [‘Russia‘, ‘a‘]]
a.sort(key=lambda x: x[0], reverse=True)
结果:
[[‘USA‘, ‘b‘], [‘Russia‘, ‘a‘], [‘China‘, ‘c‘], [‘Canada‘, ‘d‘]]
3: 嵌套字典, 按照字典值(value) 排序
a = [{‘letter‘: ‘b‘}, {‘letter‘: ‘c‘}, {‘letter‘: ‘d‘}, {‘letter‘: ‘a‘}]
a.sort(key=lambda x: x[‘letter‘], reverse=True)
结果:
[{‘letter‘: ‘d‘}, {‘letter‘: ‘c‘}, {‘letter‘: ‘b‘}, {‘letter‘: ‘a‘}]
当字典值也是字典时, 这时候会优先按照键名排序, 再按照键值排序. 例子如下

a = [{‘letter‘: {‘a‘: ‘b‘}}, {‘letter‘: {‘a‘: ‘c‘}}, {‘letter‘: {‘a‘: ‘d‘}}, {‘letter‘: {‘a‘: ‘a‘}}]
a.sort(key=lambda x: x[‘letter‘], reverse=True)
结果:
[{‘letter‘: {‘a‘: ‘d‘}}, {‘letter‘: {‘a‘: ‘c‘}}, {‘letter‘: {‘a‘: ‘b‘}}, {‘letter‘: {‘a‘: ‘a‘}}]

a = [{‘letter‘: {‘a‘: ‘b‘}}, {‘letter‘: {‘b‘: ‘c‘}}, {‘letter‘: {‘c‘: ‘d‘}}, {‘letter‘: {‘d‘: ‘a‘}}]
a.sort(key=lambda x: x[‘letter‘], reverse=True)
结果:
[{‘letter‘: {‘d‘: ‘a‘}}, {‘letter‘: {‘c‘: ‘d‘}}, {‘letter‘: {‘b‘: ‘c‘}}, {‘letter‘: {‘a‘: ‘b‘}}]

总结: 
常规查询均能够只用lambda实现, 另外还有其他方法, 比如使用operator包中的方法.  本处没有比较各个方法的效率, python 为2.7.8版本

总的来说, 上面的例子已经很详尽, 基本覆盖常见情况, 如有没有罗列, 请指正, 一起探讨!

---------------------
作者:rayimpr
来源:CSDN
原文:https://blog.csdn.net/ray_up/article/details/42084863
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/wangmo/p/10003236.html

时间: 2024-12-08 04:29:24

Python 字典 列表 嵌套 复杂排序大全的相关文章

Python - 字典按值(value)排序

字典安值排序是一个伪命题. 字典本身是不能被排序的, 已经按照关键字(key)排序, 但是列表(list)和元组(tuple)可以排序, 所以字典需要转换列表后排序. 如 import operator x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0} sorted_x = sorted(x.items(), key=operator.itemgetter(1)) 则是转换列表后的排序, dict(sorted_x) == x, 列表转换字典. 代码 # -*- coding

python 字典|列表用法

1.列表 1 s=['1','2','3'] // 定义列表s 2 3 print(s) //打印列表s 4 5 print(len(s)) //打印列表长度 len()函数可用作测量长度 具体功能可以分别代入试一试 6 7 print(type(s)) //打印列表的类型 8 9 print(s[3]) // 打印列表s的第3个元素 10 11 print(s[-2]) // 打印列表s中倒数第二个元素 12 13 print(s[0:3]) // 打印列表中 0 1 2元素 14 15 pr

python 元组 字符串 字典 列表嵌套练习题1

最近学习做的习题,直接复制过来 缩进就乱掉了,所以直接以图片方式上传,题目和答案一起

python 字典列表排序operator.itemgetter()

举例: import operator x = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] sorted_x = sorted(x, key=operator.itemgetter('name')) print sorted_x ----------------------------- [{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]

python 字典列表/列表套字典 去重重复的字典数据

原文引自:https://blog.csdn.net/weixin_37994148/article/details/99731818 第一种 def deleteDuplicate(li): func = lambda x, y: x if y in x else x + [y] li = reduce(func, [[], ] + li) return li 关于reduce(),请看http://docs.python.org/2/library/functions.html#reduce

Python: 字典列表: 通过某个字段将记录分组

问题:有一个字典或者实例的序列,想根据某个特定的字段比如date 来分组迭代访问. answer: itertools.groupby函数对于这样的数据分组操作非常实用 eg: rows = [{'address': '5412 N CLARK', 'date': '07/01/2012'},{'address': '5148 N CLARK', 'date': '07/04/2012'},{'address': '5800 E 58TH', 'date': '07/02/2012'},{'ad

Python 字典的嵌套

wf = { "name":"汪峰", "age":52, "hobby":["唱歌", "上头条", "穿皮裤"], "wife": { "name": "章子怡", "age": 49, "hobby":["演戏", "上电视"

Python中列表(list)、字典(dict)排序的程序

Python3 中的排序,在 Sorting HOW TO 中已经讲得很清楚了.来个实际的例子,对下面的这个 list 依据创建时间排序: pages = [{'title': '十年学会程序设计', 'time': '2012-02-14', 'name': '21-days'}, {'title': 'ANE Toolkit', 'time': '2012-06-07', 'name': 'anetoolkit'}, {'title': 'cocos2d-x-filters', 'time'

案例:python列表嵌套字典实现备忘录

1.使用字典和列表嵌套结构表示多条记录2.添加信息时,直接输入一句话,进行解析拆解,记录时间与事件3.不同信息采用不同颜色输出 #!/user/bin/env Python # _*_ coding:utf-8 _*_ # 51memo.py # author:大宝dayday见 __author__ = '大宝dayday见' desc = '51备忘录'.center(30,'-') print(desc) welcome = 'welcome' print(f'{welcome}作者:',