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 相关文章推荐
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
Python 递归函数详解及实例
Dec 27 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
Python实现的knn算法示例
Jun 14 Python
Flask框架Flask-Login用法分析
Jul 23 Python
python 实现手机自动拨打电话的方法(通话压力测试)
Aug 08 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
python能否java成为主流语言吗
Jun 22 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 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通过cookies获取远程网页的指定代码
2013/06/25 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
php 中的closure用法详解
2017/06/12 PHP
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue注册组件的几种方式总结
2018/03/08 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
Python数据结构之图的应用示例
2018/05/11 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
高三政治教学反思
2014/02/06 职场文书
捐款倡议书
2014/04/14 职场文书
倡议书范文
2014/04/16 职场文书
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
python manim实现排序算法动画示例
2022/08/14 Python