python筆記04:字典
阿新 • • 發佈:2017-09-25
username 說明符 坐標 修改時間 keys 設定 live bar 說明
可以使用dict函數,通過其他映射(比如字典)或者(鍵,值)對的序列建立字典
4.1 字典的使用
字典:通過名字來引用值的數據結構,又稱為映射 字典中的值並沒有特殊的順序,但是都存儲在一個特定的鍵下 字典提供的功能:快速查找特定鍵值對應關系某些情況下,字典比列表更好用一些,比如:
1.標識一個遊戲期盼的狀態,每個鍵都是由坐標值組成的元組 2.存儲文件修改時間,用文件名作為鍵 3.數字電話、地址簿 問題:為什麽用字符串而不用整數來表示電話號碼? 為了防止產生誤識別4.2 創建和使用字典
phonebook = {‘Alice‘:1567,‘Beth‘:‘3657‘,‘Cecil‘:0010}字典有多個鍵-值對構成,空字典由兩個大括號構成,如{} 註意:字典中的鍵是唯一的,值不唯一
4.2.1 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可以看到,當在副本中替換值的時候,原始字典不受影響,但是如果修改了某個字,原始字典也會發生變化,因為同樣的也存儲在原字典中,避免淺復制的一種方法就是使用深復制,復制其包含的所有值,可以使用copy模塊的deepcopy來實現 深度復制:‘] = ‘mlh‘ y[‘machine‘].remove(‘bar‘) print y print x #結果如下 {‘username‘: ‘mlh‘, ‘machine‘: [‘foo‘, ‘baz‘]} {‘username‘: ‘admin‘, ‘machine‘: [‘foo‘, ‘baz‘]}
from copy import deepcopy d = {} d[‘names‘] = [‘Alfed‘,‘Bertand‘] c = d.copy() dc = deepcopy(c) dc[‘names‘].append(‘Clive‘) print c print 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:字典