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实现面向对像的ASP程序实例
Nov 10 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
十条建议帮你提高Python编程效率
Feb 16 Python
详解python3中的真值测试
Aug 13 Python
pow在python中的含义及用法
Jul 11 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
python 连续不等式语法糖实例
Apr 15 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
python安装后的目录在哪里
Jun 21 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 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代码
2013/11/19 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php数据访问之增删改查操作
2016/05/09 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
js树形控件脚本代码
2008/07/24 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
基于python plotly交互式图表大全
2019/12/07 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
室内设计专业个人的自我评价
2013/12/18 职场文书
关于逃课的检讨书
2014/01/23 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
2016年母亲节寄语
2015/12/04 职场文书
小学四年级作文之写景
2019/08/23 职场文书
手残删除python之后的补救方法
2021/06/26 Python