a = ,
"2":}
# 清空字典
a.clear()
# 淺拷貝字典 淺拷貝雖然可以正常賦值,但是如果 my_dopy_dict 中的值進行了改變,則 a 中的值也會進行對應的改變
my_dopy_dict = a.copy()
# 深拷貝 深拷貝則是實實在在的在記憶體當中宣告了乙個新的變數
import copy
new_dict = copy.deepcopy(a)
# get函式 dict.get(要查詢的key,如果沒找到對應key的內容返回的資料)
print(a.get("3",)) #
# dict.fromkeys() 函式用於建立乙個新字典,以序列 seq 中元素做字典的鍵 seq可以是可迭代的,value 為字典所有鍵對應的初始值。
my_list = [1, 2, 3]
my_new_dict = dict.fromkeys(my_list, ) #, 2: , 3: }
# setdefault() 函式和 get()方法 類似,
# 如果鍵不存在於字典中,將會新增鍵並將值設為預設值。
# 如果存在,則將會返回該key對應的value
a.setdefault("3", "cc") # a= , '2': , '3': 'cc'}
print(a.setdefault("2", "cc")) # 返回
# update() 函式把字典dict2的鍵/值對更新到dict裡。
# 如果字典b中有與a相同的key,則會把a中的key對應的value進行更新
# 如果字典b中有a中沒有的key,則a會將未有的key與value新增進去
b =
a.update(b)
print(a) # , '2': 'dd', '3': 'cc'}
實際情況中,我們並不提倡繼承pythonn內建型別,尤其是有c語言編寫的
class mydict(dict):
def __setitem__(self, key, value):
super().__setitem__(key, value*2)
mydict = mydict(one = 1) # 並沒有呼叫__setitem__這個魔法函式
mydict["one"] = 2 # 這種方式可以呼叫__setitem__
# 綜上結論,即使繼承了dict,如果寫法出現錯誤,也不會呼叫
如必須繼承內建型別,可以使用下面方法
from collections import userdict
class mydict(userdict):
def __setitem__(self, key, value):
super().__setitem__(key, value*2)
mydict = mydict(one = 1) # 呼叫__setitem__這個魔法函式
mydict["one"] = 2 # 這種方式也可以呼叫__setitem__
dict子類的使用
from collections import defaultdict # 這個是dict的子類
mydict = defaultdict(dict)
myvalue = mydict["bai"] # 如果不存在的話,返回{}
set 集合 無序 無重 效能很高
frozenset 不可變的集合 由於他的不可變的特點,常用於dict的key
1 >>> s.add('z') #新增
2 >>> s
3 set(['c', 'e', 'h', 'o', 'p', 's', 'z'])
4 >>> s.update('pypi') #新增
5 >>> s
6 set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z'])
7 >>> s.remove('z') #刪除
8 >>> s
9 set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])
10 >>> s -= set('pypi')#刪除
11 >>> s
12 set(['c', 'e', 'h', 'o', 's'])
13 >>> del s #刪除集合
聯合( | )
1 兩個集合的聯合是乙個新集合,該集合中的每個元素都至少是其中乙個集合的成員,即,屬於兩個集合其中之一的成員。聯合符號有乙個等價的方法,union().
2 >>> s | t
3 set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
交集( & )
1 你可以把交集操作比做集合的 and(或合取)操作。兩個集合的交集是乙個新集合,該集合中的每
2 個元素同時是兩個集合中的成員,即,屬於兩個集合的成員。交集符號有乙個等價的方法,intersection()
3 >>> s & t
4 set(['h', 's', 'o', 'p']
差補/相對補集( – )
1 兩個集合(s 和 t)的差補或相對補集是指乙個集合 c,該集合中的元素,只屬於集合 s,而不屬
2 於集合 t。差符號有乙個等價的方法,difference().
3 >>> s - t
4 set(['c', 'e'])
對稱差分( ^ )
1 和其他的布林集合操作相似, 對稱差分是集合的 xor(又稱"異或 ").
2 兩個集合(s 和 t)的對稱差分是指另外乙個集合 c,該集合中的元素,只能是屬於集合 s 或者集合 t
3 的成員,不能同時屬於兩個集合。對稱差分有乙個等價的方法,symmetric_difference().
4 >>> s ^ t
5 set(['k', 'b', 'e', 'c'])
混合集合型別操作
1 上面的示例中,左邊的 s 是可變集合,而右邊的 t 是乙個不可變集合. 注意上面使用集合操作
2 運算子所產生的仍然是可變集合,但是如果左右運算元的順序反過來,結果就不一樣了:
3 >>> t | s
4 frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's'])
5 >>> t ^ s
6 frozenset(['c', 'b', 'e', 'k'])
7 >>> t - s frozenset(['k', 'b'])
dict查詢的效能遠遠大於list
在list中隨著list資料的增大,查詢時間會增大
在dict中查詢元素不會隨著dict的增大而增大
dict的key或set的值 都必須是可雜湊的
不可變物件都是可雜湊的 str tuple fronzenset
如果是自定義的類,需重寫__hash__魔法函式
dict記憶體花銷大,但是查詢速度快,自定義的物件或者python內部的物件都是用dict包裝的
dict的儲存順序和元素的新增順序有關
新增資料可能改變已有資料的順序
第六章深入python的set和dict
1.collections中的abc collection是sized,iterable,container的子類 1 from collections.abc import23 45 a 6true 2.dict的常見用法 1 a 2 2 34 清空字典 5a.clear 67 淺拷貝字典 淺拷貝...
IOC和DI的聯絡
ioc是一種設計思想,而di是這種設計思想的乙個實現。理解ioc和di的關鍵是 誰依賴誰,為什麼需要依賴,誰注入誰,注入了什麼 誰依賴於誰 當然是應用程式依賴於ioc容器 為什麼需要依賴 應用程式需要ioc容器來提供物件需要的外部資源 誰注入誰 很明顯是ioc容器注入應用程式某個物件,應用程式依賴的...
python中set和frozenset方法和區別
先簡單說一下set t.add x 新增一項 s.update 10,37,42 在s中新增多項 t.remove h 刪除一項 len s set 的長度 xin s 測試 x 是否是 s 的成員 x not in s 測試 x 是否不是 s 的成員 s.issubset t s t 測試是否 s...