python按照字典顺序比较字符串_使用json模块对字典进行排序—Python进行序列化操作的另类探讨...

上面的内容,我们梳理了json模块的四个常用的方法(参见知其然,更要知其所以然!详解用Python中json模块进行序列化操作),并对其中方法中的若干参数进行了有史以来最为详细的梳理。

梳理梳理

好奇的小伙伴们肯定会问:不就是字符串转json、json转字符串、json存入和读取么?干嘛弄这么复杂?殊不知,对于这些参数的提供,你掌握的越多,你就可以更好的使用这个模块,参数掌握得越详细,你甚至可以用这些参数实现一些其它意想不到的功能……

有吗?

我们简单来看一下!

如何快速记忆

对于四个方法的用法,我们不做探讨,记住这一点:

一定要记住它

方法有s不涉及文件对象,dump是写、load是读,使用方法pickle和json类似。

上面讲了参数了解越多,你在使用时可能会有一些意想不到的收获。来看下面两个拓展例子

字典排序

我们之前的内容讨论了如何排序一个字典(参见杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事),其中梳理也一些常用的字典排序的方式。还有没有别的办法呢?我们知道,json.dumps()方法中有一个sort_keys参数,设置为True时,它可将字典中的元素按照键顺序进行排列,利用这一条我们实现一个简单的字典排序的功能。让Python字典在json模块中走一槽,即可排列好顺序,是不是很有意思?

这功能你想到了吗?

实现过程如下:

# 导入模块

import json

# 定义一个字典

d = {'b': 2, 'c': 3, 'a': 1, 'd': 4, 'e': 5}

# 字典转化为json字符串

dD = json.dumps(d, sort_key=True)

# json字符串还原为Python字典

dL = json.loads(dD)

dL

>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

已经排好序了!

参数还有别的用法吗?

四个方法中提供的参数很有用的,限于篇幅原因,我们今天只是探讨其中比较常用的应用,以便加深大家对于内置模块中一些不常用的参数重要性的认识。对于json数据的处理,大家知道,如果对某些参数不加设定,json只能存储Python内默认的数据结构及类型,如果要存储其它数据类型(并非不可能),我们需要自己定义一些属性,而这些属性定义的基础是我们必须熟练掌握方法中的一些可选参数。

应该还有别的用法!

我们还是以刚才的字典为例,使用dump()方法将它写入本地文件中,这次实现的功能是将默认的分隔符改为自定义的一个字符,实现方法很简单,就是将('%', '@')这样的元组传入到separator中。代码如下:

f = open('C:\\json.JSON', 'w')

dD = json.dump(d, f, separators=('%', '@'))

f.close()

打开文件json.JSON,可以看到文件是这样的

{"b"@2%"c"@3%"a"@1%"d"@4%"e"@5}

比起{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},实现了一个简单的加密效果。当然,这种加密是很容易被破解的。想自己实现一些稍微复杂一点的加密,可以参照(使用Python强制破译凯撒加密算法、使用Python实现凯撒加密算法)。但这些都是很容易被破解的,本号后续会推出一些关于MD5和SHA256相关加密算法和hashlib模块的探讨,感兴趣的朋友们关注我。

言归正传,我们将上面的json文件解析一下,看看是否能获取到有效数据。

f_r = open('C:\\json.JSON', 'r')

dL = json.load(f_r)

这样在解析时,会抛出json.decoder.JSONDecodeError异常。

后续更精彩,关注不迷路!

如果在load()函数中自定义一个编码器,我们就能获得非JSONDecode数据,怎么样在函数中替换我们的"%"和"@"符号呢?留给大家自行解决吧欢迎大家留言讨论,感兴趣的朋友加关注!

转载请注明出处,百家号:Python高手养成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值