在python中,字典是一種key-value類型數據,在字典中,key是一個元素惟一的標識,什麼是字典類型,下面舉一個簡單的例子。
student = {'20141346001':'dinghaisheng', '20141346002':'wangzichun', '20141346003':'wangruiju'} print(student)
注意key和value之間是用分號,每一個元素之間是用逗號,這是一個python中一個名爲student的數據,裏面有三個元素,前一個表示學號,後一個是名字,我們都知道在學校中可能有重名的情況,但是學號是唯一的,這點在python字典數據類型中也一樣。
然後來說一下對字典的操作,常規操作爲增、刪、改、查。
1. 如果我想增加一個學號爲20141346005的學生名叫jiangwei
student['20141346005'] = 'jiangwei'
2.如果我想刪除學號爲20141346003的學生,可以 del 字典名[想刪除的學號]
del student['20141346003']
如果直接del student,則表示直接刪除了student這個字典(即刪除該字典中所有元素),這裏再介紹一種刪除字典元素的方法
student.pop('20141346003')
3. 如果我想修改學號20141346001的學生名字爲haisheng
student['20141346001'] = 'haisheng'
4. 如果我想查找學號爲20141346001的學生名字是否在這個student字典中,可以
print('20141346001' in student )
返回的值爲True,若字典中沒有這個key會返回False
如果我想查找學號爲20141346001的學生的姓名,這裏介紹兩種寫法
print(student['20141346001']) print(student.get('20141346001'))
以上兩種寫法當學號爲20141346001的學生存在時都能查到,且查找結果相同,那麼這兩種寫法區別是什麼???
假如我查找一個不存在的學號如20141346009
print(student['20141346009'])
用這種方式系統會直接報錯
print(student.get('20141346009'))
這種方式系統會顯示None,所以還是推薦第二種寫法。
以上基本操作的完整代碼如下:
student = {'20141346001':'dinghaisheng', '20141346002':'wangzichun', '20141346003':'wangruiju',} student['20141346003'] = 'weipengxiang' #del student['20141346003'] #student.pop('20141346003') student['20141346001'] = 'haisheng' print('20141346001' in student ) #print(student['20141346009']) print(student.get('20141346009')) print(student)
以上操作的完整輸出結果如下:
True
None
{'20141346001': 'haisheng', '20141346002': 'wangzichun', '20141346003': 'weipengxiang'}
---------------------------------------我是美麗惹人愛的分割線--------------------------------------------------------------
然後講一些比較複雜的操作,畢竟在實際項目中,我們遇見的不可能是上面如此簡單的字典數據,往往數據中還有嵌套,比如說下面一個很簡單的嵌套
school = {'北京':{'重點學校':{'重點學校中的重點之一':'清華', '重點學校中的重點之二':'北大'}, '211學校':'北京郵電大學', '非211學校':'某些野雞大學'}, '上海':{'最爲人知的大學':'上海交大', '不太出名但是也很厲害':'同濟大學', '非211大學':'某些野雞大學'}, '浙江':{'我最想考的大學':'浙江大學', '計算機很厲害的一個學校':'杭州電子科技大學', '非211學校':'某些野雞大學'} }
假如我想把‘’北大‘’這個數據取出來,我們怎麼辦?
print(school['北京']['重點學校']['重點學校中的重點之二'])
如果我想把‘北大 ’改爲‘北京大學’怎麼辦?
school['北京']['重點學校']['重點學校中的重點之二'] = '北京大學'
其實跟我們之前講的沒有嵌套的操作方法是相差不多的,所以讀者可以自己類比前面的增、刪、改、查方法對多級嵌套進行操作
最後講一下其他的操作,如果我想把這個字典數據key和value都輸出,可以print(school.items()),比如我只想要key不要value
print(school.keys())
同樣也有,如果我只要value不要key的方法
print(school.values())
然後講一下setdefault方法,如果我寫了代碼(這裏用第一個例子來說明)
print(student.setdefault('20141346001','whatever'))
因爲在student中已經有學號爲20141346001的學生了(這個學生名爲haisheng),這是會輸出haisheng
如果我這樣寫
print(student.setdefault('20141346008','whatever'))
在student中已經沒有學號爲20141346008的學生,這時會在student中添加一個新的元素,學號爲20141346008,名字爲whatever,並且返回新加入的value值,上面的語句輸出的結果爲whatever
最後一個問題,如何在字典中使用循環輸出字典元素???這裏介紹兩種寫法
方法一:
for i in student: print(i,student[i])
方法二:
for k,v in student.items(): print(k,v)
這兩個方法輸出的結果都是
20141346001 haisheng
20141346002 wangzichun
20141346003 weipengxiang
20141346008 whatever
一定是有區別的,否則python創始人也不會把一個功能寫兩種方式,區別在於方法二是先將字典轉變爲列表,在去執行,所以如果數據量非常大的話,方法二的時間複雜度和空間複雜度需求更大,而方法一直接可以去數據,所以這裏也推薦各位使用方法一。