1. 程式人生 > >python資料結構之字典方法

python資料結構之字典方法

字典是一種通過名字或者關鍵字引用的得資料結構,其鍵可以是數字、字串、元組,這種結構型別也稱之為對映。字典型別是Python中唯一內建的對映型別,基本的操作包括如下: 
(1)len():返回字典中鍵—值對的數量; 
(2)d[k]:返回關鍵字對於的值; 
(3)d[k]=v:將值關聯到鍵值k上; 
(4)del d[k]:刪除鍵值為k的項; 
(5)key in d:鍵值key是否在d中,是返回True,否則返回False。

一、字典的建立 
1.1 直接建立字典

 
  1. d={'one':1,'two':2,'three':3}

  2. print d

  3. print d['two']

  4. print d['three']

  5. 運算結果:

  6. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  7. {'three': 3, 'two': 2, 'one': 1}

  8. 2

  9. 3

  10. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.2 通過dict建立字典

 
  1. # _*_ coding:utf-8 _*_

  2. items=[('one',1),('two',2),('three',3),('four',4)]

  3. print u'items中的內容:'

  4. print items

  5. print u'利用dict建立字典,輸出字典內容:'

  6. d=dict(items)

  7. print d

  8. print u'查詢字典中的內容:'

  9. print d['one']

  10. print d['three']

  11. 運算結果:

  12. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  13. items中的內容:

  14. [('one', 1), ('two', 2), ('three', 3), ('four', 4)]

  15. 利用dict建立字典,輸出字典內容:

  16. {'four': 4, 'three': 3, 'two': 2, 'one': 1}

  17. 查詢字典中的內容:

  18. 1

  19. 3

  20. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

或者通過關鍵字建立字典

 
  1. # _*_ coding:utf-8 _*_

  2. d=dict(one=1,two=2,three=3)

  3. print u'輸出字典內容:'

  4. print d

  5. print u'查詢字典中的內容:'

  6. print d['one']

  7. print d['three']

  8. 運算結果:

  9. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  10. 輸出字典內容:

  11. {'three': 3, 'two': 2, 'one': 1}

  12. 查詢字典中的內容:

  13. 1

  14. 3

  15. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

二、字典的格式化字串

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3,'four':4}

  3. print d

  4. print "three is %(three)s." %d

  5. 運算結果:

  6. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  7. {'four': 4, 'three': 3, 'two': 2, 'one': 1}

  8. three is 3.

  9. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、字典方法 
3.1 clear函式:清除字典中的所有項

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3,'four':4}

  3. print d

  4. d.clear()

  5. print d

  6. 運算結果:

  7. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  8. {'four': 4, 'three': 3, 'two': 2, 'one': 1}

  9. {}

  10. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

請看下面兩個例子 
3.1.1

 
  1. # _*_ coding:utf-8 _*_

  2. d={}

  3. dd=d

  4. d['one']=1

  5. d['two']=2

  6. print dd

  7. d={}

  8. print d

  9. print dd

  10. 運算結果:

  11. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  12. {'two': 2, 'one': 1}

  13. {}

  14. {'two': 2, 'one': 1}

  15. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.1.2

 
  1. # _*_ coding:utf-8 _*_

  2. d={}

  3. dd=d

  4. d['one']=1

  5. d['two']=2

  6. print dd

  7. d.clear()

  8. print d

  9. print dd

  10. 運算結果:

  11. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  12. {'two': 2, 'one': 1}

  13. {}

  14. {}

  15. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.1.2與3.1.1唯一不同的是在對字典d的清空處理上,3.1.1將d關聯到一個新的空字典上,這種方式對字典dd是沒有影響的,所以在字典d被置空後,字典dd裡面的值仍舊沒有變化。但是在3.1.2中clear方法清空字典d中的內容,clear是一個原地操作的方法,使得d中的內容全部被置空,這樣dd所指向的空間也被置空。 
3.2 copy函式:返回一個具有相同鍵值的新字典

 
  1. # _*_ coding:utf-8 _*_

  2. x={'one':1,'two':2,'three':3,'test':['a','b','c']}

  3. print u'初始X字典:'

  4. print x

  5. print u'X複製到Y:'

  6. y=x.copy()

  7. print u'Y字典:'

  8. print y

  9. y['three']=33

  10. print u'修改Y中的值,觀察輸出:'

  11. print y

  12. print x

  13. print u'刪除Y中的值,觀察輸出'

  14. y['test'].remove('c')

  15. print y

  16. print x

  17. 運算結果:

  18. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  19. 初始X字典:

  20. {'test': ['a', 'b', 'c'], 'three': 3, 'two': 2, 'one': 1}

  21. X複製到Y:

  22. Y字典:

  23. {'test': ['a', 'b', 'c'], 'one': 1, 'three': 3, 'two': 2}

  24. 修改Y中的值,觀察輸出:

  25. {'test': ['a', 'b', 'c'], 'one': 1, 'three': 33, 'two': 2}

  26. {'test': ['a', 'b', 'c'], 'three': 3, 'two': 2, 'one': 1}

  27. 刪除Y中的值,觀察輸出

  28. {'test': ['a', 'b'], 'one': 1, 'three': 33, 'two': 2}

  29. {'test': ['a', 'b'], 'three': 3, 'two': 2, 'one': 1}

  30. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

注:在複製的副本中對值進行替換後,對原來的字典不產生影響,但是如果修改了副本,原始的字典也會被修改。deepcopy函式使用深複製,複製其包含所有的值,這個方法可以解決由於副本修改而使原始字典也變化的問題。

 
  1. # _*_ coding:utf-8 _*_

  2. from copy import deepcopy

  3. x={}

  4. x['test']=['a','b','c','d']

  5. y=x.copy()

  6. z=deepcopy(x)

  7. print u'輸出:'

  8. print y

  9. print z

  10. print u'修改後輸出:'

  11. x['test'].append('e')

  12. print y

  13. print z

  14. 運算輸出:

  15. 輸出:

  16. {'test': ['a', 'b', 'c', 'd']}

  17. {'test': ['a', 'b', 'c', 'd']}

  18. 修改後輸出:

  19. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  20. {'test': ['a', 'b', 'c', 'd', 'e']}

  21. {'test': ['a', 'b', 'c', 'd']}

  22. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.3 fromkeys函式:使用給定的鍵建立新的字典,鍵預設對應的值為None

 
  1. # _*_ coding:utf-8 _*_

  2. d=dict.fromkeys(['one','two','three'])

  3. print d

  4. 運算輸出:

  5. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  6. {'three': None, 'two': None, 'one': None}

  7. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

或者指定預設的對應值

 
  1. # _*_ coding:utf-8 _*_

  2. d=dict.fromkeys(['one','two','three'],'unknow')

  3. print d

  4. 運算結果:

  5. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  6. {'three': 'unknow', 'two': 'unknow', 'one': 'unknow'}

  7. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.4 get函式:訪問字典成員

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. print d.get('one')

  5. print d.get('four')

  6. 運算結果:

  7. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  8. {'three': 3, 'two': 2, 'one': 1}

  9. 1

  10. None

  11. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

注:get函式可以訪問字典中不存在的鍵,當該鍵不存在是返回None 
3.5 has_key函式:檢查字典中是否含有給出的鍵

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. print d.has_key('one')

  5. print d.has_key('four')

  6. 運算結果:

  7. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  8. {'three': 3, 'two': 2, 'one': 1}

  9. True

  10. False

  11. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.6 items和iteritems函式:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個迭代器物件而不是列表

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. list=d.items()

  5. for key,value in list:

  6. print key,':',value

  7. 運算結果:

  8. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  9. {'three': 3, 'two': 2, 'one': 1}

  10. three : 3

  11. two : 2

  12. one : 1

  13. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. it=d.iteritems()

  5. for k,v in it:

  6. print "d[%s]="%k,v

  7. 運算結果:

  8. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  9. {'three': 3, 'two': 2, 'one': 1}

  10. d[three]= 3

  11. d[two]= 2

  12. d[one]= 1

  13. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.7 keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. print u'keys方法:'

  5. list=d.keys()

  6. print list

  7. print u'\niterkeys方法:'

  8. it=d.iterkeys()

  9. for x in it:

  10. print x

  11. 運算結果:

  12. {'three': 3, 'two': 2, 'one': 1}

  13. keys方法:

  14. ['three', 'two', 'one']

  15.  
  16. iterkeys方法:

  17. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  18. three

  19. two

  20. one

  21. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.8 pop函式:刪除字典中對應的鍵

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. d.pop('one')

  5. print d

  6. 運算結果:

  7. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  8. {'three': 3, 'two': 2, 'one': 1}

  9. {'three': 3, 'two': 2}

  10. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.9 popitem函式:移出字典中的項

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. d.popitem()

  5. print d

  6. 運算結果:

  7. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  8. {'three': 3, 'two': 2, 'one': 1}

  9. {'two': 2, 'one': 1}

  10. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.10 setdefault函式:類似於get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值

 
  1. # _*_ coding:utf-8 _*_

  2. d={'one':1,'two':2,'three':3}

  3. print d

  4. print d.setdefault('one',1)

  5. print d.setdefault('four',4)

  6. print d

  7. 運算結果:

  8. {'three': 3, 'two': 2, 'one': 1}

  9. 1

  10. 4

  11. {'four': 4, 'three': 3, 'two': 2, 'one': 1}

  12. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.11 update函式:用一個字典更新另外一個字典

 
  1. # _*_ coding:utf-8 _*_

  2. d={

  3. 'one':123,

  4. 'two':2,

  5. 'three':3

  6. }

  7. print d

  8. x={'one':1}

  9. d.update(x)

  10. print d

  11. 運算結果:

  12. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  13. {'three': 3, 'two': 2, 'one': 123}

  14. {'three': 3, 'two': 2, 'one': 1}

  15. >>>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.12 values和itervalues函式:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由於在字典中值不是唯一的,所以列表中可以包含重複的元素

 
  1. # _*_ coding:utf-8 _*_

  2. d={

  3. 'one':123,

  4. 'two':2,

  5. 'three':3,

  6. 'test':2

  7. }

  8. print d.values()

  9. 運算結果:

  10. =======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

  11. [2, 3, 2, 123]

  12. >>>