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中函数的参数
Apr 27 Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Python get获取页面cookie代码实例
Sep 12 Python
python实现旋转和水平翻转的方法
Oct 25 Python
python中的global关键字的使用方法
Aug 20 Python
python Pillow图像处理方法汇总
Oct 16 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
python圣诞树编写实例详解
Feb 13 Python
Python类及获取对象属性方法解析
Jun 15 Python
Python通过字典映射函数实现switch
Nov 06 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中防止恶意刷新页面的代码小结
2012/10/31 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP无限分类(树形类)
2013/09/28 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
Django url 路由匹配过程详解
2021/01/22 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
幼儿园教师工作感言
2014/02/15 职场文书
满月酒邀请函
2015/01/30 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python
golang操作rocketmq的示例代码
2022/04/06 Golang
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js