1.字典介紹
字典是另一種可變容器模型,且可存儲任意類型對象,如字符串、數字、元組…… 優點:取值方便,速度快
字典的每個鍵值 key--value 對用冒號 : 分割,每個鍵值對之間用逗號 , 分割,整個字典包括在花括號 {} 中
字典中的鍵一般是唯一的,如果重復那么最后的一個鍵值對會替換前面的,值不需要唯一
dict = {'a': 1, 'b': 2, 'b': '3'} >>> dict['b'] '3' >>> dict {'a': 1, 'b': '3'}
2.創建字典
1,創建空字典
dic = {} type (dic) #output:<type 'dict'>
2,直接賦值創建字典
dic = {'aaa':1, 'bbb':2, 'ccc':3}
3,通過dict將二元組列表創建為字典
list = [('aaa', 1), ('bbb', 2), ('ccc', 3)] dic = dict(list)
#output:{'aaa': 1, 'bbb': 2, 'ccc': 3} #可以通過 list(dic.items())得到上面的list
4,通過dict和關鍵字參數(指的等式例如 spam = 1)創建
list = dict(aaa=1, bbb=2, ccc=3)
#output:{'aaa': 1, 'bbb': 2, 'ccc': 3}
5,將dict和zip相結合創建字典
dic = dict(zip('abc', [1, 2, 3])) #output:{'a': 1, 'c': 3, 'b': 2}
關於zip函數,zip() 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。例如:
可迭代的對象:Python中可迭代對象(Iterable)並不是指某種具體的數據類型,它是指存儲了元素的一個容器對象,且容器中的元素可以通過__iter__( )方法或__getitem__( )方法訪問。
- __iter__方法的作用是讓對象可以用for … in循環遍歷,getitem( )方法是讓對象可以通過“實例名[index]”的方式訪問實例中的元素。這兩個方法的目的是Python實現一個通用的外部可以訪問可迭代對象內部數據的接口。
- 一個可迭代對象是不能獨立進行迭代的,Python中,迭代是通過for … in來完成的。凡是可迭代對象都可以直接用for… in…循環訪問,這個語句其實做了兩件事:第一件事是調用__iter__()獲得一個可迭代器,第二件事是循環調用__next__()。
- 常見的可迭代對象包括:
a) 集合數據類型,如list、tuple、dict、set、str等;
b) 生成器(generator),包括生成器和帶yield的生成器函數(generator function),下節專門介紹。 - 如何判斷一個對象是可迭代對象呢?可以通過collections模塊的Iterable類型判斷,具體判斷方法如下:
from collections import Iterable #導入Iterable 模塊
isinstance(變量, Iterable) #判斷一個變量是否為可迭代對象返回True表明是可迭代對象
a = [1,2,3] b = [4,5,6] zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)]
6,通過字典推導式創建
dic = {i:2*i for i in range(3)} #output: {0: 0, 1: 2, 2: 4}
7,通過dict.fromkeys()創建,通常用來初始化字典,設置value的默認值(key沒有默認值,value有默認值)
dic = dict.fromkeys(range(3), 'x') #dic = {0: 'x', 1: 'x', 2: 'x'}
2.訪問字典中的值
1.如果寫了不存在的值會報錯:
print(d['key'])
2.如果寫了不存在的值,返回None print(d.get('key'))
3.如果找不到存在的值,返回 “not find” print(d.get('key','not find '))
4.獲取所有的key 值,返回一個包含字典所有value值的列表的視圖對象
Python 字典 key() 方法以列表形式(並非直接的列表,若要返回列表值還需調用list函數)返回字典中的所有key值
print(d.keys())
print(list(d.keys())) #以列表方式返回字典中的所有key值
print(tuple(d.keys())) #以元組方式返回字典中的所有key值
5.獲取所有的value 值,返回一個包含字典所有value值的列表的視圖對象
Python 字典 values() 方法以列表形式(並非直接的列表,若要返回列表值還需調用list函數)返回字典中的所有value值
print(d.values())
print(list(d.values())) #以列表方式返回字典中的所有value值
print(tuple(d.values())) #以元組方式返回字典中的所有value值
6.判斷key是否存在
if 'key' in d: print('key')
7. 遍歷字典①
print(d.items()) #Python 字典items() 函數以列表方式返回可遍歷的(鍵, 值) 元組數組。
print(list(d.items())) #以列表方式返回字典中的所有key值和value值,
print(tuple(d.items())) #以元組方式返回字典中的所有key值和value值
for k,v in d.items(): print(k,v)
8.遍歷字典②
無須使用items()函數轉換成list格式,保留了字典原有的特性 for k in dict: print(k,dict[k]) print(k,dict.get(k)) 取值速度快,性能好
3.修改字典
d['key'] = value key存在即修改,key不存在即新增 d.setdefault('key',value) 只能在原有字典上新增一個新的鍵值對
4.刪除字典元素
d.pop('key') 必須要傳對應key值,因為字典是無序的
d.popitem() 隨機刪除一個
del d['key'] python回收機制回收字典中的元素
d.clear() 清空字典
5.注意
print(dict.items()) 輸出一個list格式(非真正意義上的list) print(list(dict.items())) 把字典的key 和 value轉成一個多維list【列表中嵌套元組】
len(dict):計算字典元素個數,即鍵的總數。
str(dict):輸出字典可打印的字符串。
type(variable):返回輸入的變量類型,如果變量是字典就返回字典類型。
字典鍵的特性
字典值可以沒有限制地取任何python對象,既可以是標准的對象,也可以是用戶定義的,但鍵不行。
兩個重要的點需要記住:
1)不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,后一個值會被記住,如下實例:
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'} print ("dict['Name']: ", dict['Name'])
以上實例輸出結果:
dict['Name']: Manni
2)鍵必須不可變,所以可以用數字,字符串或元組充當,所以用列表就不行,如下實例:
dict = {['Name']: 'Zara', 'Age': 7} print "dict['Name']: ", dict['Name'] 以上實例輸出結果: Traceback (most recent call last): File "test.py", line 3, in <module> dict = {['Name']: 'Zara', 'Age': 7} TypeError: list objects are unhashable
字典內置函數&方法
Python字典包含了以下內置函數:
序號 | 函數及描述 |
---|---|
1 | cmp(dict1, dict2) 比較兩個字典元素。 |
2 | len(dict) 計算字典元素個數,即鍵的總數。 |
3 | str(dict) 輸出字典可打印的字符串表示。 |
4 | type(variable) 返回輸入的變量類型,如果變量是字典就返回字典類型。 |
Python字典包含了以下內置方法:
序號 | 函數及描述 |
---|---|
1 | dict.clear() 刪除字典內所有元素 |
2 | dict.copy() 返回一個字典的淺復制 |
3 | dict.fromkeys(seq[, val]) 創建一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應的初始值 |
4 | dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果鍵在字典dict里返回true,否則返回false |
6 | dict.items() 以列表返回可遍歷的(鍵, 值) 元組數組 |
7 | dict.keys() 以列表返回一個字典所有的鍵 |
8 | dict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default |
9 | dict.update(dict2) 把字典dict2的鍵/值對更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。 |
12 | popitem() 返回並刪除字典中的最后一對鍵和值。 |