一、json.loads、dumps
json是JavaScript程序编写数据结构的原生方式,在Python中,字典的格式和json格式在显示上是一样的,但是字典是dict,而json是str。
在python中,json的key只能是字符串,即使字典中的key是整数,经过dumps之后,也会成字符串。
1、json.dumps()和json.loads()是json格式处理函数
(可以这么理解,json是字符串)
(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
json.dumps( ) 和 jsonify ( ) 区别
( 1 ) jsonify 将数据格式转化为json格式,同时设置返回类型为:application/json
( 2 ) json.dumps ( ) 将数据格式转化为json格式,没有设置返回的数据类型,默认类型是:text/html
2、json.dump()和json.load()主要用来读写json文件函数
在Python中json是一个非常常用的模块,这个主要有4个方法:
json.dumps
json.dump
json.loads
json.load
如果json.dumps 转换成json时,字符串带u, 其实是Unicode字符串,去掉u 需要将字符串(是字符串,不是字典或者列表) 再次用utf-8进行编码,
response_data = {}
server_data = ServerUtils.server_list_detail(Object_InteractionWithOpenstack)
response_data['servers'] = server_data
flavor_data = FlavorsUtils.flavors_list(Object_InteractionWithOpenstack)
response_data['flavors'] = flavor_data
temp_data = json.dumps(response_data, indent=4, ensure_ascii=False)
res_data=temp_data.encode('utf-8')
3、loads方法与load方法的异同
1.1不相同点:
loads操作的是字符串 , 一般是将字符串转化为python对象
load操作的是文件流 , 一般是读取文件,将文件内容转换为python对象
1.2 相同点
除了第一个参数(要转换的对象)类型不同,其他所有的参数都相同
最终都是转换成Python对象
例子:
s = '{"name": "wade", "age": 54, "gender": "man"}'
# json.loads读取字符串并转为Python对象
print("json.loads将字符串转为Python对象: type(json.loads(s)) = {}".format(type(json.loads(s))))
print("json.loads将字符串转为Python对象: json.loads(s) = {}".format(json.loads(s)))
# json.load读取文件并将文件内容转为Python对象
# 数据文件要s.json的内容 --> {"name": "wade", "age": 54, "gender": "man"}
with open('s.json', 'r') as f:
s1 = json.load(f)
print("json.load将文件内容转为Python对象: type(json.load(f)) = {}".format(type(s1)))
print("json.load将文件内容转为Python对象: json.load(f) = {}".format(s1))
转化为python对象
日常工作中最常见的就是把字符串通过json.loads转为字典,其实json的loads方法不仅可以把字符串转为字典,还可以转为任何Python对象。
比如说,转成python基本数据类型:
print('json.loads 将整数类型的字符串转为int类型: type(json.loads("123456"))) --> {}'.format(type(json.loads("123456"))))
print('json.loads 将浮点类型的字符串转为float类型: type(json.loads("123.456")) --> {}'.format(type(json.loads("123.456"))))
print('json.loads 将boolean类型的字符串转为bool类型: type(json.loads("true")) --> {}'.format((type(json.loads("true")))))
print('json.loads 将列表类型的字符串转为列表: type(json.loads(\'["a", "b", "c"]\')) --> {}'.format(type(json.loads('["a", "b", "c"]'))))
print('json.loads 将字典类型的字符串转为字典: type(json.loads(\'{"a": 1, "b": 1.2, "c": true, "d": "ddd"}\')) --> %s' % str(type(json.loads('{"a": 1, "b": 1.2, "c": true, "d": "ddd"}'))))
json模块会根据你的字符串自动转为最符合的数据类型,
但是需要注意的是不能转为字符串,否则会报json.decoder.JSONDecodeError错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
其余详解点击关于loads更多描述
二、 sort()和sorted()
1、sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:list.sort( key=None, reverse=False)
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
该方法没有返回值,但是会对列表的对象进行排序。
#!/usr/bin/python
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond)
# 输出类别
print ('排序列表:', random)
输出:排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
2、 sorted是个函数,sort是方法。
a = [1,4,5,6,7,123,4,5]
print(a)
a.sort()
print(a)
[1, 4, 5, 6, 7, 123, 4, 5]
[1, 4, 4, 5, 5, 6, 7, 123]
b = [1,4,5,6,7,123,4,5]
print(sorted(b))
print(b)
[1, 4, 4, 5, 5, 6, 7, 123]
[1, 4, 5, 6, 7, 123, 4, 5]
由此可知,sorted(b)的排序是临时的,如果不用变量接受就会被系统回收掉。而a.sort()则是永久的,此时的sort()是对象a的一个方法。
另外,sorted(b)有个默认的参数,reverse=False,如果使用reverse=True则会实现倒序输出。
总结:
sort 与 sorted 区别:
sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)
sorted()语法:
sorted(iterable[, cmp[, key[, reverse]]])
参数说明:
iterable – 可迭代对象。
cmp – 比较的函数(python3中已被彻底移除),这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key – 主要是用来进行比较的元素(python2.4开始提供,之前采用cmp),只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。此函数将在每个元素比较前被调用。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。
实例:
>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a) # 保留原列表
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>
以下实例展示了 sort 的使用方法:
>>>l:[('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]
>>>l.sort(key=lambda x : x[1], reverse=True)
>>>l:[('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]