1. 程式人生 > 其它 >第十章、Python資料型別(字典dict)

第十章、Python資料型別(字典dict)

字典(dict)

Python中字典由花括號{} 加鍵值對組成,每個鍵值對(key:value) 用冒號: 隔開,每個對之間用逗號(,)分割,格式如下所示:

dict = {key1 : value1, key2 : value2, key3 : value3 }
鍵是唯一的不能重複,所以可以用數字,字串或元組充當,而用列表就不行。值不唯一。
1)字典建立
>>> a={}            #建立空字典
>>> a["key1"]=12        #給字典中新增鍵值對
>>> a
{'key1': 12}
>>> b=dict(key1=32,key2=43)          #利用dict()函式建立字典
>>> b
{'key2': 43, 'key1': 32}
>>> c=(['q','w'],[1,2])           
>>> c=dict(c)                  #dict()函式加元組構成字典
>>> c
{'q': 'w', 1: 2}
以上方法得到的還是原來的字典,即在字典上操作

Python 字典 fromkeys() 函式,建立一個新字典
語法: dict.fromkeys(seq, value)
以序列 seq 中元素做字典的鍵,value 為字典所有鍵對應的初始值。
引數
seq -- 字典鍵值列表。
value -- 可選引數, 設定鍵序列(seq)的值。
返回值
該方法返回一個新字典。

>>> d= {}.fromkeys(("q","w"),(1,2)) #
>>> c
{'q': 'w', 1: 2}
>>> d
{'q': (1, 2), 'w': (1, 2)}

2)基本操作:

  • len(d),返回字典(d)中的鍵值對的數量
  • d[key],返回字典(d)中的鍵(key)的值,若鍵不存在,則報錯
  • d.get(key),得到鍵key的值,若鍵不存在,則返回None
  • d[key]=value,將值(value)賦給字典(d)中的鍵(key)
  • del d[key],刪除字典(d)的鍵(key)項(將該鍵值對刪除)
  • d.clear() 函式,清空字典
  • key in d,檢查字典(d)中是否含有鍵為key的項
  • str(d),輸出字典,以可列印的字串表示。
>>> a={1:12,2:13,3:14}
>>> a.[4]
  File "<stdin>", line 1
    a.[4]
      ^
SyntaxError: invalid syntax     #dict[key]與dict.get(key)的區別
>>> a.get(4)
>>> 
>>> print(a.get(4))
None

copy()函式,複製新的變數 dict.copy()

>>> q=d.copy()         #copy後在新變數上操作不影響原來的變數
>>> q
{'q': (1, 2), 'w': (1, 2)}
>>> id(d)
139753898228264
>>> id(q)
139753942536832
>>> w=d             #在原來變數上操作
>>> id(w)
139753898228264

3)setdefault() 函式和 get()類似, 得到鍵的值,如果鍵不存在於,則新增鍵並將值設為預設值None。

語法:dict.setdefault(key, default=None)
>>> a
{1: 12, 2: 13, 3: 14}
>>> a.setdefault(4)
>>> a
{1: 12, 2: 13, 3: 14, 4: None}
>>> a.setdefault(5,16)
16
>>> a
{1: 12, 2: 13, 3: 14, 4: None, 5: 16}

4)items()和iteritems()函式

items()函式,將字典以列表形式返回,列表中的元素是由字典中的鍵和值組成的元組

>>> b={1: 12, 2: 13, 3: 14, 4: None, 5: 16}
>>> b.items()
[(1, 12), (2, 13), (3, 14), (4, None), (5, 16)]
>>> b={1: 12, 7: 13, 3: 14, 4: None, 5: 16}
>>> b.items()
[(1, 12), (3, 14), (4, None), (5, 16), (7, 13)]

iteritems()函式,將字典返回成迭代器,是一個'dictionary-itemiterator'型別,不過這種迭代器型別的資料不能直接輸出,必須用list()轉換一下,才能看到裡面的真面目。

>>> b={1: 12, 7: 13, 3: 14, 4: None, 5: 16}
>>> b.items()
[(1, 12), (3, 14), (4, None), (5, 16), (7, 13)]
>>> c=b.iteritems()
>>> c
<dictionary-itemiterator object at 0x7f743743efc8>
>>> list(c)
[(1, 12), (3, 14), (4, None), (5, 16), (7, 13)]

5)keys()和values()函式

>>> b={1: 12, 7: 13, 3: 14, 4: None, 5: 16}
>>> b.keys()           #提取字典中的鍵
[1, 3, 4, 5, 7]
>>> b.values()                #提取字典的值
[12, 14, None, 16, 13]

6)pop()和popitem()函式

pop(key[,default])函式 ,刪除字典給定鍵 key 及對應的值,返回值為被刪除的值,key必須寫

key: 要刪除的鍵值

default: 如果沒有對應key值,返回default值,[]內為可選

popitem() 函式,隨機刪除字典中一對鍵和值。並返回該鍵值對。若字典為空,就報出 KeyError 異常。

>>> b={1: 12, 7: 13, 3: 14, 4: None, 5: 16}
>>> b.popitem()
(1, 12)
>>> b.pop(7)
13

7)has_key()函式,判斷字典中是否存在某個鍵,等同於 "key in dict"

>>> b={1: 12, 7: 13, 3: 14, 4: None, 5: 16}
>>> b.has_key(1)
True
>>> 1 in b
True