Python编程对列表中字典元素进行排序的方法详解
作者:jihite 发布时间:2023-11-23 04:48:26
标签:Python,列表,字典,排序
本文实例讲述了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}]
[{'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程序设计有所帮助。
0
投稿
猜你喜欢
- 见下,把数字转成条形图、条形码的一个程序:<%Sub ShowChart(ByRef aValues,
- 本文重在实践和测试,如果你还不了解Data URI,推荐先阅读秦歌的Data URI 和 MHTML。旺旺点灯(JS)实践经过:因为要对SR
- 本文实例讲述了php计算给定日期所在周的开始日期和结束日期。分享给大家供大家参考,具体如下:<?php/** * 取得给定日期所在周的
- 目前,SQL Server数据库有几个版本都在使用中,比如 7.0, 2000和2005,那么,在现实的工作和学习中,你很有可能会需要从以前
- 情况一:坐标上的内容是文字时如上图这样一个横向的柱状图,y坐标轴的内容太长后会导致显示不全。因为数据是由后端传过来的,有些会很长有些会比较短
- 在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高
- 在VBScript中有Filter这个函数可以用来对数组进行过滤,并返回原数组的一个子集数组。语法说明: 引用内容Filter 函
- 今天突然想起做一个当鼠标经过<a/>时,会发出声音Js代码如下: <script type="text
- “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型。
- ..:: 巧用CSS制作艺术字 ::..如果灵活应用CSS各种滤镜的特点并加以组合,我们可以得到许多意想不到的效果。这是一些效果示范,供各位
- --sql语句就用下面的存储过程 /*--数据导出Excel导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不
- 要使用request对象的ServerVariables属性,通过它来获得环境变量的值。使用的语法为:Request.ServerVaria
- 【尝尝管理员的滋味】- 淡然看,其实一切都很简单IE的滤镜泄露是最大的危害,没有找到方法解决,所以禁用了滤镜。<!DOCTYPE ht
- 前言亲人工作考试,公司给的题库好像是直接从数据库导出的表格Excel形式,在移动端上非常难看,需要不断左右上下滑动,看不了多少题眼就瞎了,遂
- 1、说明tqdm是一个方便且易于扩展的Python进度条,可以在python执行长循环时在命令行界面实时地显示一个进度提示信息,包括执行进度
- 我们利用linux系统中yum安装Apache+MySQL+PHP是非常的简单哦,只需要几步就可以完成,具体如下:一、脚本YUM源安装:1.
- 准备篇1.配置防火墙,开启80端口、3306端口1 vim /etc/sysconfig/iptables2 -A INPUT -m sta
- 【1】 以XML 返回 (1)未定义属性的 select logisticsId,logisticsName from LogisticsC
- LoadRunner监控MySQLhttp://www.docin.com/p-92272846.htmlAdvanced MySQL Pe
- 昨天我突发奇想,想用display:inline来实现三列的布局可是搞了半天就是不行。但是理论上是可以的呀(后来才发现是不理解的不深刻,我的