1. 程式人生 > >Python常用資料結構--字典

Python常用資料結構--字典

字典介紹


假設有個列表nameList,如果列表中的第2個元素寫錯了,那麼需要使用下列程式碼來修改:
nameList = ['xiaozhang','xiaowang','xiaoli']
nameList[1] = 'xiaoxiaowang' 


但是,如果列表元素的順序發生了變化,此時又要改下標,才能完成名字的修改,具體如下:
nameList = ['xiaowang','xiaozhang','xiaoli']
nameList[0] = 'xiaoxiaowang'


有沒有方法,既能儲存多個數據,還能在訪問元素的時候很方便就能夠定位到需要的那個元素呢?

答:
字典


一、字典的建立
info = {'name':'班長',‘id’:100,'sex':'f','address':'地球亞洲中國北京'}


說明:
1、字典和列表一樣,也能夠儲存多個數據
2、列表中找某個元素時,是根據下標進行的
3、字典中找某個元素時,是根據名字(就是冒號:前面的那個值)
4、字典的每個元素由2部分組成,鍵:值。需要注意的是,鍵必須是唯一的,但值可以是任何型別的



字典的常見操作
1、根據鍵訪問值
>>>info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
>>>print(info['name'])
>>>print(info['address'])
>>>班長
>>>地球亞洲中國北京


需要注意的是,若訪問不存在的鍵,則會報錯
>>> info['age']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'age'


在我們不確定字典中是否存在某個鍵而又想獲取其值時,可以使用get方法,get方法用於返回指定鍵的值,如果訪問
的鍵不在字典中,則會返回預設值。
>>>info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
>>> age = info.get('age')
>>> age #'age'鍵不存在,所以age為None
>>> type(age)
<type 'NoneType'>
>>> age = info.get('age', 18) #若info中不存在‘age’這個鍵,就返回預設值
>>> age
18


2、修改字典中的值

字典是可變的,它支援元素進行修改操作,包括新增新的元素、修改或者刪除已經存在的元素。如果要新增的鍵已經存在,那麼字典中該鍵對應
的值會被新值替代。
>>>info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
>>>newId = input('請輸入新的學號')
>>>info['id'] = int(newId)
>>>print('修改之後的id為%d:'%info['id'])
>>>請輸入新的學號200
>>>修改之後的id為200

3、新增字典元素

當使用“變數名['鍵'] = 資料”時,如果字典中不存在這個鍵,那麼就會在字典中新增一個元素。
>>>info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
>>>newId = input('請輸入新的學號')
>>>info['id'] = newId
>>>print('新增之後的id為:%d'%info['id'])
>>>請輸入新的學號168
>>>新增之後的id為168


4、刪除字典元素
對字典進行刪除操作,可以使用del或者clear兩個命令實現,其中,del用於刪除字典,而clear只是單純的清空字典中的資料。

4.1 使用del刪除字典元素
info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
print('刪除前,%s'%info['name'])
del info['name']
print('刪除後,%s'%info['name'])
Traceback(most recent call last):
File "test.py",line 9,in <module>
print '刪除後',info['name']
KeyError: 'name'
結論:del刪除字典元素後,不能再訪問。

4.2 使用clear清空字典元素
info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
print('清空前,%s'%info['name'])
del info['name']
print('清空後,%s'%info['name'])

清空前,{'name':'班長', 'address':'地球亞洲中國北京', 'sex':'f', 'id':100}
清空後,{}

5、計算字典中鍵值對的個數
len方法可以計算字典中鍵值對的個數
>>>dict = {'Name':'xiaowang', 'Age':16}
>>>print("Length : %d" % len(dict))
>>>Length : 2

6、返回一個包含字典所以KEY的列表
keys方法可以獲取字典的鍵檢視
>>>dict = {'Name':'xiaowang', 'Age':16}
>>>print(dict.keys)
>>>['Name','Age']

7、返回一個包含字典所以value的列表
values方法可以獲取字典的值檢視
>>>dict = {'Name':'xiaowang', 'Age':16}
>>>print(dict.values)
>>>['xiaowang',16]

8、返回一個包含所以(鍵,值)的元組的列表
items方法可以獲取字典的元素檢視
>>>dict = {'Name':'xiaowang', 'Age':16}
>>>print(dict.items)
>>>[('Name','xiaowang'),('Age',16)]

9、字典的遍歷
在實際開發中,字典的遍歷可以利用for迴圈來完成。
dict = {'Name':'xiaowang', 'Age':16}
9.1 遍歷字典的鍵
>>>for key in dict.keys():
...   print(key)
...
Name
Age


9.2 遍歷字典的值
>>>for value in dict.values():
...   print(value)
...
xiaowang
16

9.3 遍歷字典的元素
>>>for item in dict.items():
...   print(item)
...
('Name','xiaowang')
('Age',16)

10、判斷一個KEY是否在字典中,在返回True,否則返回False
>>>dict = {'Name':'xiaowang','Age':16}
>>>dict.has_key('Name')
>>>True
>>>dict.has_key('id')
>>>False



思考:如果實現帶下標索引的遍歷

>>> chars = ['a', 'b', 'c', 'd']
>>> i = 0
>>> for chr in chars:
...     print("%d %s"%(i, chr))
...     i += 1
...
0 a
1 b
2 c
3 d

python內建函式:enumerate()
>>> chars = ['a', 'b', 'c', 'd']
>>> for i, chr in enumerate(chars):
...     print i, chr
...
0 a
1 b
2 c

3 d