Python编程对列表中字典元素进行排序的方法详解

发布时间 - 2026-01-11 01:22:48    点击率:

本文实例讲述了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}'  【单引号在外】

PS:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用:

在线JSON代码检验、检验、美化、格式化工具:
http://tools./code/json

JSON在线格式化工具:
http://tools./code/jsonformat

在线XML/JSON互相转换工具:
http://tools./code/xmljson

json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools./code/jsoncodeformat

在线json压缩/转义工具:
http://tools./code/json_yasuo_trans

更多Python相关内容感兴趣的读者可查看本站专题:《Python操作json技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


# Python  # 列表  # 字典  # 排序  # Python中字典(dict)和列表(list)的排序方法实例  # Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例  # Python利用公共键如何对字典列表进行排序详解  # Python常见排序操作示例【字典、列表、指定元素等】  # python列表字典排序的实现示例  # 列表中  # 操作技巧  # 可以看出  # 转换工具  # 的是  # 进阶  # 相关内容  # 则是  # 感兴趣  # 数据结构  # 给大家  # 所述  # 含着  # 几款  # 程序设计  # 使用技巧  # 键值  # 就可以  # 再为  # 象中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel storage目录权限问题_Laravel文件写入权限设置  如何解决hover在ie6中的兼容性问题  如何快速选择适合个人网站的云服务器配置?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  如何在Windows环境下新建FTP站点并设置权限?  Laravel如何使用.env文件管理环境变量?(最佳实践)  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何在腾讯云免费申请建站?  如何用搬瓦工VPS快速搭建个人网站?  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何处理文件下载请求?(Response示例)  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel如何使用Livewire构建动态组件?(入门代码)  LinuxShell函数封装方法_脚本复用设计思路【教程】  linux写shell需要注意的问题(必看)  Laravel如何实现事件和监听器?(Event & Listener实战)  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  高端企业智能建站程序:SEO优化与响应式模板定制开发  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Python制作简易注册登录系统  公司网站制作价格怎么算,公司办个官网需要多少钱?  网站制作壁纸教程视频,电脑壁纸网站?  如何在 React 中条件性地遍历数组并渲染元素  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  javascript日期怎么处理_如何格式化输出  北京企业网站设计制作公司,北京铁路集团官方网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速搭建高效香港服务器网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  LinuxCD持续部署教程_自动发布与回滚机制  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  青岛网站建设如何选择本地服务器?  Laravel如何处理CORS跨域请求?(配置示例)  韩国服务器如何优化跨境访问实现高效连接?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  如何快速辨别茅台真假?关键步骤解析  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何在Tomcat中配置并部署网站项目?  网站优化排名时,需要考虑哪些问题呢?  ,南京靠谱的征婚网站?  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  javascript中的try catch异常捕获机制用法分析  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何在云主机上快速搭建网站?