当前位置:Gxlcms > Python > Python编程如何对列表中字典元素进行排序的方法详解

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

时间:2021-07-01 10:21:17 帮助过:88人阅读

这篇文章主要介绍了Python编程对列表中字典元素进行排序的方法,涉及Python针对列表及字典元素的遍历、读取、转换相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python编程对列表中字典元素进行排序的方法。分享给大家供大家参考,具体如下:

内容目录:

1. 问题起源
2. 对列表中的字典元素排序
3. 对json进行比较(忽略列表中字典的顺序)

一、问题起源

json对象a,b


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

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


  1. >>> a = [{'a':1, 'b':2}, {'c':3}]
  2. >>> a
  3. [{'a': 1, 'b': 2}, {'c': 3}]
  4. >>> b = set(a)
  5. Traceback (most recent call last):
  6. File "<pyshell#2>", line 1, in <module>
  7. b = set(a)
  8. TypeError: unhashable type: 'dict'

提示为字典是不可进行哈希操作的类型(普通非字典的元素进行哈希操作即可轻松排好序)。

那么问题的本质即:如何对列表中的字典元素排序。

二、对列表中的字典元素排序

还好,列表有sorted函数,试一下


  1. >>> p = [{'b': 2}, {'a': 1, 'c': 3}]
  2. >>> q = [{'a': 1, 'c': 3}, {'b': 2}]
  3. >>> p
  4. [{'b': 2}, {'a': 1, 'c': 3}]
  5. >>> q
  6. [{'a': 1, 'c': 3}, {'b': 2}]
  7. >>> pp = sorted(p)
  8. >>> qq = sorted(q)
  9. >>> pp
  10. [{'b': 2}, {'a': 1, 'c': 3}]
  11. >>> qq
  12. [{'b': 2}, {'a': 1, 'c': 3}]
  13. >>> pp == qq
  14. True
  15. >>> p == q
  16. False

可以看出,ok的,并且可以看出排序的原则是元素个数。

三、对json进行比较(忽略列表中字典的顺序)


  1. import json
  2. def compare_json(a, b):
  3. aa = json.loads(a)
  4. bb = json.loads(b)
  5. len_a = len(aa)
  6. len_b = len(bb)
  7. if len_a != len_b:
  8. return False
  9. else:
  10. for key in aa:
  11. if not bb.has_key(key):
  12. return False
  13. else:
  14. if sorted(aa[key]) != sorted(bb[key]):
  15. return False
  16. return True
  17. if name == "main":
  18. a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
  19. b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'
  20. print compare_json(a, b)

细节:自己写json格式时,a = "{'road':1}" json.loads(a) 错误,得写成a = '{"road:1}' 【单引号在外】

以上就是Python编程如何对列表中字典元素进行排序的方法详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行