普通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的子物件不會變。