Collections -- OrderedDict類


普通dict(字典)在插入的時候並不記住元素的順序,迭代器會根據散列表(哈希表)中存儲的順序來生成的。而OrderedDict則會記錄元素的順序,並且在迭代器輸出時,會按現在記錄的順序進行遍歷。

例:

創建有序字典:

  import collections as c

  dict = c.OrderedDict()

  dict['Hello'] = '你好'

  dict['cute'] = '可愛'

  dict['busy'] = '忙碌'

  dict['just'] = '剛才'

 

  for k,v in dict.items():
    print('{0} = {1}'.format(k,v))

 

結果:

  Hello = 你好

  cute = 可愛

  busy = 忙碌

  just = 剛才

 

clear():清空有序字典,清空字典所有項。,會輸出一個OrderedDict()對象。

例:

  print(dict.clear())

結果:

  OrderedDict()

 

copy():淺拷貝

  print(dict.copy())

結果:OrderedDict([('Hello', '你好'), ('cute', '可愛'), ('busy', '忙碌'), ('just', '剛才')])

 

pop():刪除指定的鍵,如果找不到該鍵則報錯。

例: 

  hello=dic.pop('Hello')

  print(hello)

結果:

  你好

 

clear()和pop()的區別:

pop():可以把有序字典看為一個棧,當需要其中某一個鍵值對的時候,可以使用pop()方法,根據鍵彈出這個值,賦給一個變量然后去使用這個值。彈出來棧里就沒有該鍵了,如果你再去訪問它就會報錯。(pop()方法差不多都是這個原理,僅限於博主接觸到的)

clear():是清空有序字典里的所有項,做了清空操作里面的鍵值對就會不存在。

 

items():返回有鍵值對組成的列表

例:

  for k,v in dic.items():

  print('{0} = {1}'.format(k,v))

結果:

Hello = 你好
cute = 可愛
busy = 忙碌
just = 剛才

當for循環里只有一個參數接收鍵值對時,它輸出的是有序字典里面的每個元素,是用括號括起來的。

例:

  for k in dic.items():

  print('{0}'.format(k))

結果:

('Hello', '你好')
('cute', '可愛')
('busy', '忙碌')
('just', '剛才')

 

淺拷貝和深拷貝的區別:

Copy():淺拷貝,淺拷貝沒有拷貝子對象,只是引用了子對象,所以改變原始數據的子對象,那淺拷貝后的數據也會被改變。可以看出,copy()方法都是淺拷貝。

例:

  a=[1,2,3,4,[5,6]]  

  print(a)      

  b=a.copy()

  print(b)

  print('-' * 20)

  a[4][0]=8

  print(a)

  print(b)

結果:

[1, 2, 3, 4, [5, 6]]  
[1, 2, 3, 4, [5, 6]]
--------------------
[1, 2, 3, 4, [8, 6]]
[1, 2, 3, 4, [8, 6]]

首先定義一個列表a,再輸出這個a,然后再拷貝一下a並且復制給b,並輸出b,最后進行修改子對象里的第一個值修改為8,這時輸出a和b它倆的子對象同時改為8.

Deepcopy():深拷貝,他和子對象一起拷貝了一個新的,並不是引用了子對象,所以改變原始數據的子對象,那拷貝后的數據也不會被改變。深拷貝需要導入copy模塊,然后使用deepcopy()方法進行拷貝,需要給這個方法放入一個要拷貝的參數。

例:

  import copy

  a=[1,2,3,4,[5,6]]  

  print(a)  

  b=copy.deepcopy(a)

  print(b)

  print('-' * 20)

  a[4][0]=8

  print(a)

  print(b)

結果:

[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, [5, 6]]
--------------------
[1, 2, 3, 4, [8, 6]]
[1, 2, 3, 4, [5, 6]]

首先定義一個列表a,再輸出這個a,然后再深拷貝一下a並且復制給b,並輸出b,最后進行修改子對象里的第一個值修改為8,這時輸出a的子對象改為8,b的子對象不會變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM