博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python对列表中字典元素排序
阅读量:5843 次
发布时间:2019-06-18

本文共 1795 字,大约阅读时间需要 5 分钟。

阅读目录

问题起源

json对象a,b

a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'

特点:a,b对应的Python的对象中对应的键值——列表中包含着相同的字典元素,但是唯一不同的是顺序不同。如果忽略顺序,如何判断两个json是否相等。因为字典本身是自己按键排序的,列表是按加入的顺序排序的,如果对列表中的字典元素进行排序就可以轻松地排序了。如果列表中是普通的元素(不是字典),通过list(set())组合可以读列表进行排序,而列表中如果是字典元素不能使用list(set())组合,看提示:

1
2
3
4
5
6
7
8
9
>>> 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函数,试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> 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 jsondef 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}'  【单引号在外】

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/4696340.html,如需转载请自行联系原作者

你可能感兴趣的文章
OpenCV学习(7.13)
查看>>
使用idea搭建Maven+SSM(Spring+SpringMVC+Mybatis)框架(一、使用Maven创建新工程)
查看>>
如何自定义一个注解(@Annotation)
查看>>
“导航技术”学习笔记
查看>>
PAT_A1140#Look-and-say Sequence
查看>>
经典傅里叶算法小集合 附完整c代码
查看>>
at&汇编
查看>>
C 语言泛型编程--quickSort实现
查看>>
使用Sublime Text 2 编辑Markdown
查看>>
highchart 曲线图
查看>>
Asp.net core 学习笔记 ( OData )
查看>>
MyEclipse出现红色感叹号解决办法
查看>>
【转】mysql createtable errno 121 150 错误 建表错误 外键
查看>>
HDOJ1548(BFS)
查看>>
为什么今日头条是技术牛人收割机(FW)
查看>>
1.3 基础语法
查看>>
Django media 配置
查看>>
HDU 1003 Max Sum
查看>>
Swiper 触屏滑动切换
查看>>
[Node.js]操作mysql
查看>>