【Python】字典dict型別轉換為列表list型別
我們有時候用chrome瀏覽器獲取Network中XHR的資料,得到的是Json型別,有時也可能是python中的字典型別,如果獲取的資料比較複雜,通過簡單的處理我們是無法拿到我們需要的資料的,這時我們就需要對資料進行轉換處理,主要涉及到4中資料型別:str字串,list列表,dict字典,tuple元組,或者混合型別。請參考以下案例,假設我們獲取的資料是這樣的(已簡單處理):
class_dict = { "total":"5", "rows": [ {"courseName":"課程1","audioname":"1.mp4","pdfFileId":"1.pdf","learnStatus":"未開始","student":"我"}, {"courseName":"課程2","audioname":"2.mp4","pdfFileId":"2.pdf","learnStatus":"null","student":"我"}, {"courseName":"課程3","audioname":"3.mp4","pdfFileId":"3.pdf","learnStatus":"已開始","student":"我"}, {"courseName":"課程4","audioname":"4.mp4","pdfFileId":"4.pdf","learnStatus":"未開始","student":"我"}, {"courseName":"課程5","audioname":"5.mp4","pdfFileId":"5.pdf","learnStatus":"已開始","student":"我"} ] }
我現在想要獲取到courseName,audioname,pdfFileId,learnStatus的值,並存入到EXCEL中的4列。
我們的思路是,先將這個原始資料轉換成一個二維列表[['課程1', '1.mp4', '1.pdf', '未開始'], ['課程2', '2.mp4', '2.pdf', 'null'],...]
然後將二維列表的值迴圈存入到EXCEL檔案中。
解決這個問題前,我們先介紹一下字典的一些基礎知識:
一、字典型別與json型別的區別
1.python dict 字串可以用單引號或者雙引號,json強制規定雙引號。
2.python {“me”: “我”} 是合法的,json必須是 {“me”: “\u6211”}
3.字典型別與json可以相互轉換,字典轉換為json:dict_json = json.dumps(dict),
json轉換為字典型別:json_dict = json.loads(json)
二、遍歷字典的鍵值,得到各種資料型別
def deal_dict(): class_json = json.dumps(class_dict) print("class_json為str型別:", type(class_json), class_json) print("class_dict為字典型別:", type(class_dict)) # 1.遍歷字典key值,value值:一般為字串,如果字典為複雜情況,比如上面class_dict,第二個key的value為複雜情況 # 這個時候會出現字串,列表等型別 for key in class_dict: print("遍歷字典key+value值1:", key, class_dict[key]) print("這裡的鍵值為多種資料型別1::", type(class_dict[key])) for key in class_dict.keys(): print("遍歷字典key+value值2:", key, class_dict[key]) for value in class_dict: print("遍歷字典key+value值3:", value, class_dict[value]) for key, value in class_dict.items(): print("遍歷字典key+value值4:", key, value) print("這裡的鍵值為多種資料型別2:", type(value)) for (key, value) in class_dict.items(): print("遍歷字典key+value值5:", key, value) print("這裡的鍵值為多種資料型別3:", type(value)) print(class_dict.items()) print("class_dict.items()為字典_列表型別:", type(class_dict.items())) if __name__ == '__main__': deal_dict()
三、遍歷字典項,得到的是元組型別
# 2.遍歷字典項,得到的是元組型別
for item in class_dict.items():
print("遍歷字典項:", item)
print("這裡的item為元組型別:", type(item))
四、建立一個函式得到二維列表:
def dict_to_list():
class_list = [] #1.建立一個空的二維列表
for key, value in class_dict.items():
print("value的資料型別:",type(value),value) #2.獲取字典型別資料的value(dict-->str,list)
for item1 in value:
if isinstance(value, (list)): #3.過濾value中非列表型別的資料(str,list-->list)
print("資料型別為字典:", type(item1), item1) #4.獲取列表中的字典資料(list-->dict)
rows = [] #5.建立一個空的列表存放資料
for info in item1:
if info == 'courseName'or info == 'audioname' or info == 'pdfFileId' or info == 'learnStatus':
rows.append(item1[info]) #6.獲取字典型別資料的value存入到一維列表(dict-->str-->list)
if rows: # 如果列表不為空
class_list.append(rows) # 二維列表存入資料
return class_list
if __name__ == '__main__':
#deal_dict()
print(dict_to_list())
這個方法的思路是遍歷字典的鍵值然後再處理資料:dict-->list-->dict-->str-->list
還有一種方法是遍歷字典項生成元組,再處理資料:dict-->tuple-->list-->dict-->str-->list
def dict_to_list2():
class_list = [] #1.建立一個空的二維列表
for item in class_dict.items(): #2.獲取字典型別資料的字典項(dict-->tuple)
a = item[1] #3.獲取元組的資料集合(tuple-->str,list)
print("item[1]的資料型別:", type(a), a) #4.檢視元組的資料的型別
for list in a: #5.分別獲取元組的資料(str-->str,list-->dict)
rows=[]
for info in list:
if info == 'courseName'or info == 'audioname' or info == 'pdfFileId' or info == 'learnStatus':
rows.append(list[info]) #6.獲取字典型別資料的value存入到一維列表(dict-->str-->list)
if rows: # 如果列表不為空
class_list.append(rows) # 二維列表存入資料
return(class_list)
if __name__ == '__main__':
#deal_dict()
#print(dict_to_list())
print(dict_to_list2())
到這裡算是得到了我們想要的資料,但是如果要存入到Excel檔案,那還需要處理,下篇文章將介紹一下如何對Excel操作。