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处理图片之PIL模块简单使用方法
May 11 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
Python基于property实现类的特性操作示例
Jun 15 Python
Python爬取成语接龙类网站
Oct 19 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
python一些性能分析的技巧
Aug 30 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 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/11/28 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
实例讲解php数据访问
2016/05/09 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
对Python _取log的几种方式小结
2019/07/25 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
领导党性分析材料
2014/02/15 职场文书
产品质量承诺范本
2014/03/31 职场文书
租车协议书范本2014
2014/11/17 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
解析MySQL binlog
2021/06/11 MySQL
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
浅析Python OpenCV三种滤镜效果
2022/04/11 Python