一、字典簡介
- 字典(dictionary)是包含若干“鍵:值”元素的無序可變序列,字典中的每個元素包含用冒號分隔開的“鍵”和“值”兩部分,表示一種映射或對應關係,也稱關聯數組。
- 定義字典時,每個元素的“鍵”和“值”之間用冒號分隔,不同元素之間用逗號分隔,所有的元素放在一對大括號“{}”中。
- 字典中元素的“鍵”可以是Python中任意不可變數據,例如整數、實數、複數、字符串、元組等類型等可哈希數據,但不能使用列表、集合、字典或其他可變類型作爲字典的“鍵”。
- 字典中的“鍵”不允許重複,“值”是可以重複的。
二、字典的創建與刪除
- 使用賦值運算符“=”將一個字典賦值給一個變量即可創建一個字典變量。
>>> aDict = {'server': 'db.diveintopython3.org', 'database': 'mysql'}
- 也可以使用內置類dict以不同形式創建字典。
>>> x = dict() #空字典
>>> type(x) #查看對象類型
<class 'dict'>
>>> x = {} #空字典
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> dictionary = dict(zip(keys, values)) #根據已有數據創建字典
>>> d = dict(name='Dong', age=39) #以關鍵參數的形式創建字典
>>> aDict = dict.fromkeys(['name', 'age', 'sex']) #以給定內容爲“鍵”,創建“值”爲空的字典
>>> aDict
{'age': None, 'name': None, 'sex': None}
三、字典元素的訪問
- 字典中的每個元素表示一種映射關係或對應關係,根據提供的“鍵”作爲下標就可以訪問對應的“值”,如果字典中不存在這個“鍵”會拋出異常。
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'}
>>> aDict['age'] #指定的“鍵”存在,返回對應的“值”
39
>>> aDict['address'] #指定的“鍵”不存在,拋出異常
KeyError: 'address'
- 字典對象提供了一個get()方法用來返回指定“鍵”對應的“值”,並且允許指定該鍵不存在時返回特定的“值”。例如:
>>> aDict.get('age') #如果字典中存在該“鍵”則返回對應的“值”
39
>>> aDict.get('address', 'Not Exists.') #指定的“鍵”不存在時返回指定的默認值
'Not Exists.'
- 使用字典對象的items()方法可以返回字典的鍵、值對。
- 使用字典對象的keys()方法可以返回字典的鍵。
- 使用字典對象的values()方法可以返回字典的值。
四、字典元素的添加、修改與刪除
1、添加
當以指定“鍵”爲下標爲字典元素賦值時,有兩種含義:
1)若該“鍵”存在,則表示修改該“鍵”對應的值;
2)若不存在,則表示添加一個新的“鍵:值”對,也就是添加一個新元素。
>>> aDict = {'age': 35, 'name': 'Dong', 'sex': 'male'}
>>> aDict['age'] = 39 #修改元素值
>>> aDict
{'age': 39, 'name': 'Dong', 'sex': 'male'}
>>> aDict['address'] = 'SDIBT' #添加新元素
>>> aDict
{'age': 39, 'address': 'SDIBT', 'name': 'Dong', 'sex': 'male'}
2.修改
使用字典對象的update()方法可以將另一個字典的“鍵:值”一次性全部添加到當前字典對象,如果兩個字典中存在相同的“鍵”,則以另一個字典中的“值”爲準對當前字典進行更新。
>>> aDict = {'age': 37, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'}
>>> aDict.update({'a':97, 'age':39}) #修改’age’鍵的值,同時添加新元素’a’:97
>>> aDict
{'score': [98, 97], 'sex': 'male', 'a': 97, 'age': 39, 'name': 'Dong'}
3.刪除
- 如果需要刪除字典中指定的元素,可以使用del命令。
>>> del aDict['age'] #刪除字典元素
>>> aDict
{'score': [98, 97], 'sex': 'male', 'a': 97, 'name': 'Dong'}
- 也可以使用字典對象的pop()和popitem()方法彈出並刪除指定的元素,例如:
>>> aDict = {'age': 37, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'}
>>> aDict.popitem() #彈出一個元素,對空字典會拋出異常
('age', 37)
>>> aDict.pop('sex') #彈出指定鍵對應的元素
'male'
>>> aDict
{'score': [98, 97], 'name': 'Dong'}
五、字典應用舉例
首先生成包含1000個隨機字符的字符串,然後統計每個字符的出現次數。
import string
import random
x = string.ascii_letters + string.digits + string.punctuation #字符、數字、標點
y = [random.choice(x) for i in range(1000)]
z = ''.join(y)
d = dict() #使用字典保存每個字符出現次數
for ch in z:
d[ch] = d.get(ch, 0) + 1
for k,v in sorted(d.items()):
print(k,':',v)