1. 程式人生 > >【Python】字典dict型別轉換為列表list型別

【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操作。