1. 程式人生 > >Python學習--字典

Python學習--字典

idt print 映射 關聯 als 檢查 -- get 作用

在Python中通過名字來引用值的數據結構稱為映射(mapping)。字典是Python中唯一內建(Python解釋器本身支持,不需要import)的映射類型。字典中的值沒有特殊的順序,都存儲在一個特定的鍵(key)下。鍵可以是數字,字符串,甚至是元組。

一、創建字典

phonebook = {Tom:1234,Lily:4567}

字典由兩個大括號{}組成,空字典就可以這樣表示{}。

每個鍵和它的值之間用冒號 ‘:‘ 隔開。鍵可以是任意的不可變類型

項之間用逗號 ‘,‘ 隔開。

字典中的鍵是唯一的,而值不唯一。如果存在鍵名一樣的項,後面的值會覆蓋前面的。

>>> a = {1:2,1:3,1:4,2:2}
>>> a {1: 4, 2: 2}

函數 作用
dict() 通過其它映射或者(鍵,值)對的序列簡歷字典

二、基本字典操作

操作 說明
len(d) 返回字典d中項(鍵-值)的數目
d[k] 返回關聯到鍵k上的值
d[k] = v

將值v關聯到鍵k上

如果k不存在,就會建立新的項

del d[k] 刪除鍵為k的項
k in d 檢查字典d中是否含有鍵為k的項

三、字典的格式化字符串

  1. >>> phonebook
  2. {‘Lily‘: ‘2345‘, ‘Tom‘: ‘1234‘}
  3. >>> "Tom‘s phone number is %(Tom)s." % phonebook
  4. "Tom‘s phone number is 1234."
在每個轉換說明符中的%字符後面,可以加上鍵(用圓括號括起來),後面再跟上其它說明元素。

四、字典方法

方法 例子 說明
dict.clear()

>>> phonebook

{‘Lily‘: ‘2345‘, ‘Tom‘: ‘1234‘}

>>> phonebook.clear()

>>> phonebook

{}

清除字典中所有的項,無返回值(或者說返回None)。這是個原地操作,即直接操作原始字典。
dict.copy()

>>> x = {‘a‘:1,‘b‘:2,‘c‘:3}

>>> y = x.copy()

>>> y[‘c‘]=100

>>> y

{‘a‘: 1, ‘c‘: 100, ‘b‘: 2}

>>> x

{‘a‘: 1, ‘c‘: 3, ‘b‘: 2}

返回一個具有相同鍵-值對的新字典。

但是這個方法是淺復制。當在副本中替換值(例子中的重新賦值)的時候,原始字典不受影響。但是如果是修改某個值(不是替換,是修改,比如刪除之類),原始字典也會改變。

deepcopy(dict) 這個是深復制,區別於copy。得到新的副本後,修改不會影響原始字典。
dict.fromkeys()

>>> x= {‘ab‘:‘1‘,‘cd‘:‘2‘}

>>> x.fromkeys([‘ef‘,‘gh‘])

{‘ef‘: None, ‘gh‘: None}

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> y=x.fromkeys([‘ef‘,‘gh‘])

>>> y

{‘ef‘: None, ‘gh‘: None}

使用給定的鍵建立新的字典,每個鍵都對應一個默認的值None。

返回新的序列。

可以{}.fromkeys(...)或者dict.fromkeys(....)

dict.get()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.get(‘cd‘)

‘2‘

>>> x.get(‘aa‘)

>>> print x.get(‘aa‘)

None

>>> x.get(‘aa‘,‘N/A‘)

‘N/A‘

訪問字典項的方法,如果不存在,返回None。也可以自己定義找不到的時候返回值。
dict.has_key()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.has_key(‘ab‘)

True

>>> x.has_key(‘ax‘)

False

檢查字典中是否含有特定的鍵。

這個表達式相當於k in d

dict.items()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.items()

[(‘ab‘, ‘1‘), (‘cd‘, ‘2‘)]

將字典的所有項以列表方式返回,列表中每一項表示為(鍵,值)對的形式,但是返回沒有特別的次序。
dict.iteritems()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> it = x.iteritems()

>>> list(it)

[(‘ab‘, ‘1‘), (‘cd‘, ‘2‘)]

類似ltems的作用,但是返回的是叠代器
dict.keys()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.keys()

[‘ab‘, ‘cd‘]

將字典的鍵以列表的方式返回
dict.pop()

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.pop(‘ab‘)

‘1‘

>>> x

{‘cd‘: ‘2‘}

獲得對應於給定鍵的值,然後將這個鍵-值對從字典中移除。
dict.popitem()

>>> x

{‘gh‘: ‘3‘, ‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> x.popitem()

(‘gh‘, ‘3‘)

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

作用類似pop,只是彈出列表中隨機的項。
dict.setdefault

>>> x

{‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> print x.setdefault(‘gh‘)

None

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘cd‘: ‘2‘}

>>> print x.setdefault(‘ij‘,‘N/A‘)

N/A

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘ij‘: ‘N/A‘, ‘cd‘: ‘2‘}

>>> x.setdefault(‘ab‘)

‘1‘

某種程度上類似於get方法。

當鍵不存在的時候,setdefault返回默認值並且相應的更新字典,默認值是可以選的,也可以自己設定值。。如果鍵存在,那麽就返回與其對應的值,但不改變字典。

dict.update()

>>> y

{‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘}

>>> x

{‘gh‘: None, ‘ab‘: ‘1‘, ‘ij‘: ‘N/A‘, ‘cd‘: ‘2‘}

>>> x.update(y)

>>> x

{‘ab‘: ‘1‘, ‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘, ‘ij‘: ‘N/A‘, ‘gh‘: None}

利用好一個字典項來更新另外一個字典。提供的字典中的項會被添加到舊的字典中,若有相同的鍵會進行覆蓋

d.values()

>>> x

{‘ab‘: ‘1‘, ‘mm‘: ‘haha‘, ‘cd‘: ‘kk‘, ‘ij‘: ‘N/A‘, ‘gh‘: None}

>>> x.values()

[‘1‘, ‘haha‘, ‘kk‘, ‘N/A‘, None]

以列表的方式返回字典中的值,返回值的列表中可以包含重復的元素。

clear的特別說明:

所謂的直接操作原始字典可以從下面兩個例子對比來看

例子1:

>>> x={}

>>> y=x

>>> x[‘key‘]=‘value‘

>>> y

{‘key‘: ‘value‘}

>>> x={}

>>> y

{‘key‘: ‘value‘}

例子2:

>>> x={}

>>> y=x

>>> x[‘key‘]=‘value‘

>>> y

{‘key‘: ‘value‘}

>>> x.clear()

>>> y

{}

從上面的兩個例子來看,x,y最初都對應同一個字典,例子1中通過將x重新關聯到一個新的空字典來達到清空的目的,對y沒有影響。但是例子2裏,通過clear方法來清空原始數據裏的元素,就會影響到y。

Python學習--字典