您好,登錄后才能下訂單哦!
字典dict
key-value 鍵值對的數據的集合
可變的,無序的,key不重復,可迭代
字典dict定義 初始化
d = dict() 或者 d = {}
dict(**kwargs)使用name = value對 初始化一個字典
dict(iterable,**kwarg)使用可迭代對象的name = value對 構造字典,不過可迭代對象的元素必須是一個二元結構
d = dict(((1,"a"), (2,'b'))) 或者 dict(([1,"2"],[2,"b"]))
dict(mapping,kwarg) 使用一個字典構建另一個字典
d ={'a' : 10 , "b" : 20, "c" : None, 'd' : [1,2,3]}
類方法dict.fromkeys(iterable , value)
d = dict.fromkeys(range(5)) -> {0: None, 1: None, 2: None, 3: None, 4: None} d = dict.fromkeys(rang(5),0) -> {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
字典元素的訪問
dict[key]
返回key對應的值value
key不存在拋出KeyError異常
dict.get(key[,default])
返回key對應的值value
key不存在返回缺省值,如果沒有設置缺省值就返回None
dict.setdefault(key[,default])
返回key對應的值value
key不存在,添加k=v對,value設置為default,并返回default,如果default沒有設置,缺省為None
字典增加和修改
dict[key] = value
將key對應的值修改為value
key不存在將添加新的k=v對
dict.update([other]) -> None
使用另個字典的kv 對更新本字典
key不存在,就添加
key存在,覆蓋已經存在的key對應的值
就地修改
d.update(red = 1) d.update((('red' , 2),)) d.update({'red' : 3})
字典刪除
dict.pop(key [, default])
key存在,移除它,并返回它的value
key不存在,返回給定的default
default未設置,key不存在則拋出keyError
dict.popitem()
移除并返回一個任意的鍵值對
字典為empty,拋出KeyError異常
dict.clear()
清空字典
del 語句
a = True b = [6] d = {'a':1,'b':b,'c':[1,3,4]} del a del d['c'] # 并沒有刪除對象[1,3,4],只是他的引用次數減一了 del b[0] # b這個變量之前已經被del掉
#del d['c'] 看著像刪除了一個對象,本質上減少了一對象的引用,del實際上刪除的是名稱,而不是對象
字典遍歷
for ... in dict:
遍歷key
for k in d: print(k) for k in d.keys(): print(k)
遍歷value
for k in d: print(d[k]) for k in d.keys(): print(d.get(k)) for v in d.values(): print(v)
遍歷item,即k=v對
for item in d.items(): -> 返回有2個元素的元組tuple print(item) for item in d.items(): print(item[0],item[1]) for k,v in d.items(): print(k,v)
字典遍歷總結
python3 中,keys values items方法返回一個類似一個生成器的可迭代對象,不會把函數的返回結果復制到內存中(不重復占用內存)
Dictionary view對象,可以使用len().iter(),in操作
字典的entry的動態的視圖,字典變化,視圖反映出這些變化
keys返回一個類set對象,也就是可以看做一個set集合.如果values都可以hash,那么items也可以看做是類set對象
[了解]python2 中,上面的方法會返回一個新的列表,占據新的內存空間.所以Python2 建議使用iterkeys,itervalues,iteritems版本,返回一個迭代器,而不是返回一個copy
字典遍歷和移除
如何在遍歷的時候移除元素
正確的做法:
d = dict(a =1,b = 2,c = 'abc') keys = [] for k,v in d.items(): if isinstance(v,str) keys.append(k) 創建一個k的列表 for k in keys: d.pop(k) # 移除c print(d) out:{'a': 1, 'b': 2}
錯誤的做法:
d = dict(a =1,b = 2,c = 'abc') for k,v in d.items(): d.pop(k) #異常( dictionary changed size during iteration) while len(d): # 相當于清空,不如直接celar print(d.popitem()) while d: print(d.popitem())
字典的key
key的要求和set 的元素要求一致
set 的元素就可以看做key , set 可以看做dict 的簡化版
hashable 可哈希才可以作為key,使用hash()測試
d = {1:0 , 2.0:3 , "abc":None , ('hello' , 'world' , 'python'):'string' , b'abc' : '135'}
defaultdict
collections.defaultdict([default_factory[, ...]])
第一個參數是default_factiory,缺省的是None,它提供一個初始化函數..當key不存在的時候,會調用這個工廠函數來生成Key對應的value
import random d1 = {} for k in 'abcdef': for i in range(random.randint(1,5)): if k not in d1.keys(): d1[k] = [] # d1 內增加key:[] d1[k].append(i) # key對應的value添加值 print(d1) from collections import defaultdict import random d1 = defaultdict(list) for k in 'abcdef': for i in range(random.randint(1,5)): d1[k].append(i) print(d1)
OrderedDict
collections.OrderedDict([items])
key并不是按照加入的順序排列,可以使用OrderedDict記錄順序
有序字典可以記錄元素插入的順序,打印的時候也是按照這個順序輸出打印
應用場景
加入使用了字典記錄了N個產品,這些產品使用ID由小到大加入到字典中
除了使用字典檢索的遍歷,有時候需要去除 ID, 但是希望是按照輸入的順序,因為輸入順序是有序的
否則還需要重新把遍歷到的值排序
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。