九、python基礎:數據容器(字典的創建和相關操作)
1、什麼是字典
在python中,字典用英文dict表示,它用一個大括號包起來的,裏面可以存放各種類型數據。但必須是以鍵值對的形式存在,鍵值對的個數沒有限制,鍵值對之間使用逗號隔開,每個鍵值對中間都有一個冒號,冒號前面的是鍵key,冒號後面的是值value。
d = {'name':'xiaoming', 'skill': ['eat', 'run', 'study']}
像這個變量d,我們用一個字典賦值給它,字典中的“name”和“skill”就是它的鍵。“xiaoming”和列表[‘eat’, ‘run’, ‘study’]就是它的值。一個"name":‘xiaoming’,這樣的組合就是一個鍵值對。
在字典中,鍵key和值value是成對出現的,有鍵就必須有值。
它通常用來表示一一對應的映射關係,這個怎麼理解呢?舉個例子
我們可以用一個字典來存放一個班級的學生信息
students = [
{'name':'小明', 'phone': '156XXXXXX', '成績': 90},
{'name': '小紅', 'phone': '185XXXXXXX', '成績':95},
]
這樣的結構其實是一個列表裏面存放了2個字典,內部的每個字典都存放了一個學生的多個信息。
如果我們想要知道每個學生的姓名,我們只要把內部的每個字典都取出來,接着用鍵名"name"去從字典中取出值,就能知道對應學生的姓名是什麼了。
演示一下:
這就是映射:只要使用’name’去取值,就一定能獲取到對應一個姓名,用’phone’去取值,就一定能獲取到對應的電話號碼。
也是因此,在同一個字典中,鍵名是不能重複的。否則,你通過鍵名去取值的時候,解釋器都不知道你要取的是哪一個。
並且你在定義的時候,如果有相同鍵名的,解釋器只會使用最後一個鍵值對生成。
例如這個,字典中的2個鍵值對都使用了"name"作爲鍵名,導致創建出來的字典,只有一個鍵值對。
2、字典的創建:
2.1、簡單創建方法:
# 創建一個空字典,直接用大括號即可,也可以用內置方法dict()
d = {}
d = dict()
# 字典也可以存放各種類型的數據。
d = {'a': '1', 'b': '2', 'c': 1, 'd':1.2, 'e': (1, 2), 'f': [1, 2], 'g':{'a': '1'}}
2.2、較複雜的創建方法:
# 內置方法dict,搭配關鍵字參數創建
dict(a='a', b='b', t='t')
# 內置方法dict,搭配zip映射函數構建
dict(zip(['one', 'two', 'three'], [1, 2, 3]))
# 用可迭代對象創建,列表內嵌套元組
dict([('one', 1), ('two', 2), ('three', 3)])
演示結果:
2.3、自動批量創建(使用for循環結合佔位符)
dict = {}
for i in range(5):
dict['第%d個'%i] = i
print(dict)
演示結果:
3、字典的常用操作:
我們操作字典經常用到的就是取出某個鍵對應的值
使用中括號,你要去哪個鍵的值就寫對應的鍵名:
d = {'name':'小明', 'age':12, 'skill': ['eat', 'run', 'study']}
# 取出字典d中的鍵名name對應的值
d['name']
還有其他用到比較多的操作是:
修改某個值,新增鍵值對,統計字典的鍵值對個數,取出字典所有鍵,取出字典所有值,取出字典所有鍵值對
d = {'name':'小明', 'age':12, 'skill': ['eat', 'run', 'study']}
# 修改某個值(把名字改成小紅)
d['name'] = '小紅'
# 新增鍵值對(加個電話號碼)
d['phone'] = '156xxxxxxx'
# 統計字典的鍵值對個數
len(d)
# 取出字典所有鍵
d.keys()
# 取出字典所有值
d.values()
# 取出字典所有鍵值對
d.items()
演示結果:
4、一些不常用的操作函數和方法
min(d) # 字典中鍵的最小值
max(d) # 字典中鍵的最大值
d.get(key, default) # 鍵存在則返回相應值,否則返回默認值
d.pop(key, default) # 鍵存在則返回相應值,並且刪除該鍵值對,否則返回默認值
d.popitem() # 隨機從字典中取出一個鍵值對,以元組形式返回
d.clear() # 刪除所有鍵值對