python學習-python字典的操作

在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創始人也不會把一個功能寫兩種方式,區別在於方法二是先將字典轉變爲列表,在去執行,所以如果數據量非常大的話,方法二的時間複雜度和空間複雜度需求更大,而方法一直接可以去數據,所以這裏也推薦各位使用方法一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章