python列表中元素排序_Python对列表中字典元素排序

问题起源

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 "", line 1, in

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去除列表中重复元素的方法

列表中元素位置的索引用的是L.index 本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set 1 2 3 l1 = ['b','c', ...

【381】python 获取列表中重复元素的索引值

参考:获取python的list中含有重复值的index方法_python_脚本之家 核心思想:建立字典,遍历列表,把列表中每个元素和其索引添加到字典里面 cc = [1, 2, 3, 2, 4] f ...

Python对List中的元素排序

首先定义一个compare函数: def compare(sf1, sf2): if (sf1.value > sf2.value): return -1; elif (sf1.value == ...

Python求列表中某个元素的下标

一.求列表中某个元素的下标 def findindex(org, x, pos=-1): counts = org.count(x) #先求出org中包含x的个数 if counts == 0: #个 ...

python——删除列表中的元素

在python中,删除列表元素的方法有三种,分别为remove(),del(),pop()函数 (1)remove() >>> name = ['小明','小华','小红','小李' ...

Python查找列表中某个元素返回所有下标

需求 找出list中某一元素并返回所有匹配index值 问题 使用index()只能返回一个下标 >>> cw=[0,1,2,1,1,0,1,0,0,1] >>> ...

python 获得列表中每个元素出现次数的最快方法

import collections import numpy as np import random import time def list_to_dict(lst): dic = {} for ...

Python 去除列表中重复的元素

Python 去除列表中重复的元素 来自比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还 ...

随机推荐

hdu 3518 (后缀数组)

题目描述: 找出一个字符串中至少重复出现两次的字串的个数(重复出现时不能重叠). code: 后缀数组处理,对于得到height 进行查找...  参考http://blog.csdn.net/mis ...

php 中文字符串首字母的获取函数

这篇文章介绍了php 中文字符串首字母的获取函数,有需要的朋友可以参考一下 function chineseFirst($str) { $str= iconv("UTF-8",&q ...

已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。

描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数.   输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 ...

KoaHub.js是基于 Koa.js 平台的 Node.js web 快速开发框架

koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...

mysql数据库在Linux下安装与配置

mysql是一种开放源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. 由于mysql的开源,因此任何人都可以在General Publ ...

GIT的使用(Gitlab上传本地仓库代码,Webstorm修改更新)

准备:GIT的安装,Gitlab账户登陆,webstorm的安装 1.首先,你得先会在Gitlab中创建一个团体,在团体中创建一个项目,先建组,再建项目,网上哪里都有教程,随便找了个网址: https ...

RNG牛掰!

2018-05-21 RNG牛掰!Uzi圆梦! 不说了,先去哭了! 2018-07-08 洲际赛后更新,RNG依然牛逼! 2018-08-30 亚运后后更新,UZI加油! 2018-10-22 继续加 ...

(转)Multi-Object-Tracking-Paper-List

Multi-Object-Tracking-Paper-List 2018-08-07 22:18:05 This blog is copied from: https://github.com/Sp ...

Android 视觉规范

各种分辨率下图片尺寸 工程师通常开发三套UI布局文件,所以设计师通常也要不同的需求处理2-3套切图. con Type Standard Asset Sizes (in Pixels), for Ge ...

Debian 8 升级到 9 Debian 9 How to upgrade Debian 8 Jessie to Debian 9 Stretch

How to upgrade Debian 8 Jessie to Debian 9 Stretch Contents 1. Objective 2. What's New 3. Preparatio ...

你可能感兴趣的:(python列表中元素排序)