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 CGI脚本的教程
Jun 29 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
python修改txt文件中的某一项方法
Dec 29 Python
python写入文件自动换行问题的方法
Jul 05 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
浅析Python3 pip换源问题
Jan 06 Python
django有哪些好处和优点
Sep 01 Python
详解Python中的Lock和Rlock
Jan 26 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
详解在Python中处理异常的教程
2015/05/24 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Delphi CS笔试题
2014/01/04 面试题
大学生就业推荐信范文
2013/11/29 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
户籍证明格式
2014/09/15 职场文书
开网店计划分析
2019/07/30 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang