python函數——json.loads、dumps、sort()、sorted

一、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()函數是將字符串轉化爲字典

2、json.dump()和json.load()主要用來讀寫json文件函數

在Python中json是一個非常常用的模塊,這個主要有4個方法:

json.dumps
json.dump
json.loads
json.load

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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章