Python 裡面最複雜的內建資料型態是字典, 也就是一群鍵值對物件的群集 (collection). 字典的鍵必須是可雜湊的 (hashable), 不可變的資料型態例如 int, float, bool, complex, str, tuple 這六種型別都可算出唯一的雜湊值, 因此都可以作為 key; 而 list, set, 與 dict 這三個可變型別為不可雜湊 (unhashable), 因此不能做 key, 參考 :
# python中的hashable(可雜湊的)是什麼意思
字典的值可以是任何一種物件型態 (Python 的資料全部都是物件), 當然也可以是另一個字典, 例如 :
>>> p1={'name':'孫藝珍',
'age':38,
'diploma':'首爾藝術大學'}
>>> p2={'name':'玄彬',
'age':37,
'diploma':'中央大學戲劇電影學系'}
>>> p={'p1':p1,'p2':p2}
>>> print(p)
{'p1': {'name': '孫藝珍', 'age': 38, 'diploma': '首爾藝術大學'}, 'p2': {'name': '玄彬', 'age': 37, 'diploma': '中央大學戲劇電影學系'}}
可見直接用 print() 列印巢狀字典時, 每個項目會前後串在一起不容易閱讀. 使用內建模組 pprint 的 pprint() 函數可以讓每個項目分開條列, pprint 模組使用前須先匯入 :
>>> import pprint
>>> pprint.pprint(p)
{'p1': {'age': 38, 'diploma': '首爾藝術大學', 'name': '孫藝珍'},
'p2': {'age': 37, 'diploma': '中央大學戲劇電影學系', 'name': '玄彬'}}
不過 pprint() 的整齊列印只限於最外層項目, 例如新增一個含有內層字典的項目 p3 :
>>> p3={'name':'河智苑',
'age':41,
'diploma':'檀國大學戲劇電影學系',
'works':{'2006':'黃真伊',
'2013':'奇皇后',
'2019':'巧克力'}}
>>> p['p3']=p3
用 print() 列印全部項目串在一起 :
>>> print(p)
{'p1': {'name': '孫藝珍', 'age': 38, 'diploma': '首爾藝術大學'}, 'p2': {'name': '玄彬', 'age': 37, 'diploma': '中央大學戲劇電影學系'}, 'p3': {'name': '河智苑', 'age': 41, 'diploma': '檀國大學戲劇電影學系', 'works': {'2006': '黃真伊', '2013': '奇皇后', '2019': '巧克力'}}}
用 pprint() 只有外層項目會逐項整齊條列 :
>>> pprint.pprint(p)
{'p1': {'age': 38, 'diploma': '首爾藝術大學', 'name': '孫藝珍'},
'p2': {'age': 37, 'diploma': '中央大學戲劇電影學系', 'name': '玄彬'},
'p3': {'age': 41,
'diploma': '檀國大學戲劇電影學系',
'name': '河智苑',
'works': {'2006': '黃真伊', '2013': '奇皇后', '2019': '巧克力'}}}
可見內層項目 works 的值不會逐項條列.
沒有留言 :
張貼留言