標籤:說明 號碼 bsp 注意 格式 book art code 這一
4.1 字典的使用字典:通過名字來引用值的資料結構,又稱為映射字典中的值並沒有特殊的順序,但是都儲存在一個特定的鍵下字典提供的功能:快速尋找特定索引值對應關係
某些情況下,字典比列表更好用一些,比如:
1.標識一個遊戲期盼的狀態,每個鍵都是由座標值組成的元組2.隱藏檔修改時間,用檔案名稱作為鍵3.數字電話、地址簿 問題:為什麼用字串而不用整數來表示電話號碼?為了防止產生誤識別 4.2 建立和使用字典
phonebook = {‘Alice‘:1567,‘Beth‘:‘3657‘,‘Cecil‘:0010}
字典有多個鍵-值對構成,空字典由兩個大括弧構成,如{}注意:字典中的鍵是唯一的,值不唯一4.2.1 dict函數可以使用dict函數,通過其他映射(比如字典)或者(鍵,值)對的序列建立字典
items = [(‘name‘,‘Gumby‘),(‘age‘,43)]d = dict(items)>>> print d{‘age‘: 43, ‘name‘: ‘Gumby‘}
4.2.2 字典的基本操作len(d) :返回d總的索引值對數量d[k] :返回關聯到鍵k上的值d[k]=v :將值v關聯到鍵k上del d[k]:刪除鍵為k的項k in d :檢查d中是否含有鍵為k的項 鍵類型:不一定是整型,可以是任意的不可變類型,如浮點型(實型)、字串或者元組4.2.3 字典的格式化字串
phonebook = {‘Alice‘:1567,‘Beth‘:‘3657‘,‘Cecil‘:0010}>>> "Cecil‘s phone number is %(Cecil)s." % phonebook"Cecil‘s phone number is 8."
4.2.4 字典方法1.clear:清除字典中的所有項這個操作沒有傳回值2.copy:返回一個具有相同索引值對的新字典這一種複製是淺複製淺複製:
x = {‘username‘:‘admin‘,‘machine‘:[‘foo‘,‘bar‘,‘baz‘]}y = x.copy()y[‘username‘] = ‘mlh‘y[‘machine‘].remove(‘bar‘)print yprint x#結果如下{‘username‘: ‘mlh‘, ‘machine‘: [‘foo‘, ‘baz‘]}{‘username‘: ‘admin‘, ‘machine‘: [‘foo‘, ‘baz‘]}
可以看到,當在副本中替換值的時候,原始字典不受影響,但是如果修改了某個字,原始字典也會發生變化,因為同樣的也儲存在原字典中,避免淺複製的一種方法就是使用深複製,複製其包含的所有值,可以使用copy模組的deepcopy來實現深度複製:
from copy import deepcopyd = {}d[‘names‘] = [‘Alfed‘,‘Bertand‘]c = d.copy()dc = deepcopy(c)dc[‘names‘].append(‘Clive‘)print cprint dc#結果如下:{‘names‘: [‘Alfed‘, ‘Bertand‘]}{‘names‘: [‘Alfed‘, ‘Bertand‘, ‘Clive‘]}
3.fromkeys:使用給定的鍵建立新字典
>>> {}.fromkeys([‘name‘,‘age‘]){‘age‘: None, ‘name‘: None}>>> dict.fromkeys([‘name‘,‘age‘]){‘age‘: None, ‘name‘: None}
4.get:更寬鬆的訪問字典方法一般來說,如果試圖訪問字典中不存在的項時會出錯,而用get就不會
>>> d = {}>>> d[‘name‘]Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: ‘name‘>>> print d.get(‘name‘)None
可以看到,但是用get訪問一個不存在的鍵時,沒有任何異常,而得到了None值。還可以自訂預設值,替換None
>>> print d.get(‘name‘,‘N/A‘)N/A
如果鍵存在,get用起來就像普通的字典查詢一樣
>>> d[‘age‘] = 43>>> d.get(‘age‘)43
5.haskey:判斷是否有特定鍵相當於運算式k in d.6.item與iteritems:將字典的值以列表形式返回items方法將字典中所有項以列表的形式返回,列表中的每一項表示為(鍵、值)對的形式,但是項在返回時並沒有遵循特定的次序
>>> d = {‘name‘:‘Lily‘,‘age‘:24}>>> d.items()[(‘age‘, 24), (‘name‘, ‘Lily‘)]
iteritems方法的作用大致相同,但是會返回一個迭代器對象而不是一個列表
>>> it = d.iteritems()>>> print it<dictionary-itemiterator object at 0x7f54e5fff158>>>> print list(it)[(‘age‘, 24), (‘name‘, ‘Lily‘)]
7.keys與iterkeys:將字典中的鍵以列表形式返回keys方法將字典中的鍵以列表形式返回,iterkeys則返回針對鍵的迭代器8.pop:獲得相應鍵的值,並刪除索引值對
>>> d{‘age‘: 24, ‘name‘: ‘Lily‘}>>> d.pop(‘name‘)‘Lily‘>>> d{‘age‘: 24}
9.popitem:彈出最後一個元素列示於list.pop,後者會彈出列表的最後一個元素。但不同的是,popitems彈出隨機的項,因為字典並沒有“最後的元素”或者其他有關順序的概念。弱項一個接一個的移除並處理項,這個方法就非常有效了10.setdefault:獲得給定鍵相關聯的值類似於get方法,能夠獲得與給定鍵相關聯的值,除此之外,setdefault還能在字典中不含有給定鍵的情況下設定相應的索引值
>>> d = {}>>> d.setdefault(‘name‘,‘N/A‘)‘N/A‘>>> d{‘name‘: ‘N/A‘}>>> d[‘name‘] = ‘Gumby‘>>> d.setdefault(‘name‘,‘N/A‘)‘Gumby‘>>> d{‘name‘: ‘Gumby‘}
可以看到,當鍵不存在時,setdefault返回預設值並且相應的更新字典。如果鍵存在,那麼就返回與其對應的值,但不改變字典。預設值是可選的,這點和get一樣,如果不設定,就會使用None
>>> d = {}>>> d.setdefault(‘name‘,[]).append(my_sister)>>> d{‘name‘: [‘Anne‘]}>>> d.setdefault(‘name‘,[]).append(‘my_sister‘)>>> d{‘name‘: [‘Anne‘, ‘my_sister‘]}
11.update:利用一個字典項更新另一個字典例:
>>> d = {‘name‘:‘Gumby‘,‘age‘:42,‘address‘:‘BeiJing‘}>>> x = {‘name‘:‘Lily‘}>>> d.update(x)>>> d{‘age‘: 42, ‘name‘: ‘Lily‘, ‘address‘: ‘BeiJing‘} #d中的name值已隨x更新>>> x{‘name‘: ‘Lily‘}
12.values與itervalues:返回字典中的值values方法以列表的形式返回字典中的值,itervalues傳回值得迭代器4.3 小結映射:映射可以使用任意不可變對象標識元素。最常用的類型是字串和元組。python唯一內建的映射類型是字典利用字典格式化字串:可以通過在格式化說明符中包括名稱(鍵)來對字典應用字串格式化操作。當在字串格式化中使用元組時,還需要對元組中的每一個元素都設定“格式化說明符”,在使用字典時,所用的說明符可以比在字典中用到的項少字典的方法:
python筆記04:字典