1. 程式人生 > >python筆記04:字典

python筆記04:字典

username 說明符 坐標 修改時間 keys 設定 live bar 說明

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 y print x #結果如下 {username: mlh, machine: [foo, baz]} {username: admin, machine: [foo, baz]}
可以看到,當在副本中替換值的時候,原始字典不受影響,但是如果修改了某個字,原始字典也會發生變化,因為同樣的也存儲在原字典中,避免淺復制的一種方法就是使用深復制,復制其包含的所有值,可以使用copy模塊的deepcopy來實現 深度復制:
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:字典