Python编程对列表中字典元素进行排序的方法详解


Posted in Python onMay 26, 2017

本文实例讲述了Python编程对列表中字典元素进行排序的方法。分享给大家供大家参考,具体如下:

内容目录:

1. 问题起源
2. 对列表中的字典元素排序
3. 对json进行比较(忽略列表中字典的顺序)

一、问题起源

json对象a,b

a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'

特点:a,b对应的Python的对象中键对应的键值——列表中包含着相同的字典元素,但是唯一不同的是顺序不同。如果忽略顺序,如何判断两个json是否相等。因为字典本身是自己按键排序的,列表是按加入的顺序排序的,如果对列表中的字典元素进行排序就可以轻松地排序了。如果列表中是普通的元素(不是字典),通过list(set())组合可以读列表进行排序,而列表中如果是字典元素不能使用list(set())组合,看提示:

>>> a = [{'a':1, 'b':2}, {'c':3}]
>>> a
[{'a': 1, 'b': 2}, {'c': 3}]
>>> b = set(a)
Traceback (most recent call last):
 File "<pyshell#2>", line 1, in <module>
  b = set(a)
TypeError: unhashable type: 'dict'

提示为字典是不可进行哈希操作的类型(普通非字典的元素进行哈希操作即可轻松排好序)。

那么问题的本质即:如何对列表中的字典元素排序。

二、对列表中的字典元素排序

还好,列表有sorted函数,试一下

>>> p = [{'b': 2}, {'a': 1, 'c': 3}]
>>> q = [{'a': 1, 'c': 3}, {'b': 2}]
>>> p
[{'b': 2}, {'a': 1, 'c': 3}]
>>> q
[{'a': 1, 'c': 3}, {'b': 2}]
>>> pp = sorted(p)
>>> qq = sorted(q)
>>> pp
[{'b': 2}, {'a': 1, 'c': 3}]
>>> qq
[{'b': 2}, {'a': 1, 'c': 3}]
>>> pp == qq
True
>>> p == q
False

可以看出,ok的,并且可以看出排序的原则是元素个数。

三、对json进行比较(忽略列表中字典的顺序)

import json
def compare_json(a, b):
  aa = json.loads(a)
  bb = json.loads(b)
  len_a = len(aa)
  len_b = len(bb)
  if len_a != len_b:
    return False
  else:
    for key in aa:
      if not bb.has_key(key):
        return False
      else:
        if sorted(aa[key]) != sorted(bb[key]):
          return False
  return True
if __name__ == "__main__":
  a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
  b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'
  print compare_json(a, b)

细节:自己写json格式时,a = "{'road':1}"  json.loads(a) 错误,得写成a = '{"road:1}'  【单引号在外】

Python 相关文章推荐
Python中利用原始套接字进行网络编程的示例
May 04 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Python查看微信撤回消息代码
Jun 07 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
PyQt5实现画布小程序
May 30 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
python如何快速拼接字符串
Oct 28 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
利用Python实现网络测试的脚本分享
May 26 #Python
python 如何快速找出两个电子表中数据的差异
May 26 #Python
详解Python3操作Mongodb简明易懂教程
May 25 #Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 #Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 #Python
Python win32com 操作Exce的l简单方法(必看)
May 25 #Python
python win32 简单操作方法
May 25 #Python
You might like
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python自动12306抢票软件实现代码
2018/02/24 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
美国折扣网站:jClub
2017/08/07 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
采购主管工作职责
2013/12/12 职场文书
学校安全工作制度
2014/01/19 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
出纳员岗位职责
2014/03/13 职场文书
十周年庆典策划方案
2014/06/03 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
大学生社会服务心得体会
2016/01/22 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
利用Python实现模拟登录知乎
2022/05/25 Python
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技