字典dict
key-value鍵值對的數據的集合
?? ?可變的、無序的、key不重復的
字典dict定義、初始化
d = dict() 或者 d = {}
dict(**kwargs)使用name = value對初始化一個字典
dict(iterable,**kwarg)使用可迭代對象和name=value對構造字典,不過可迭代對象必須是一個二元結構
?? ?d = dict(((‘a’,1),(‘b’,2)))或者 d = dict(([1,’a’],[2,’b’]))
dict(mapping,**kwarg)使用一個字典構建另一個字典
類方法dict.fromkeys(iterable,value)
? ? d = dict.fromkeys(range(5))
? ? d = dict.fromkeys(range(5),0)
字典元素的訪問
d[key]
返回key對應的value值
如果key不存在,報keyerror異常
get[key[,default]]
如何key存在,返回key所對應的value,如果不存在返回設置的默認值default,如果沒有設置缺省值,返回None
setdefault(key[,default])
返回key對應的value
key不存在,添加kv對,value為default,并返回default,如果缺省值沒有設置,就返回為None
字典的增加和修改
d[key] = value
? ? 將key對應的值修改為value
? ? 如果key不存在則添加新的kv對
update([other]) ->None
? ? 使用另一個字典的kv對更新本字典
? ? key不存在,就添加
???key存在,覆蓋已經存在的key對應的值
? ? 就地修改
—|——|——–|—例如
d = {‘a’:1,’b’:2}
d1 = {‘c’:3,’d’:4,’a’:5000}
d.update(d1)
d
{‘a’: 5000, ‘b’: 2, ‘c’: 3, ‘d’: 4}
=====================================
d.update(red=1)
d.update(((‘red’,2),))
d.update({‘red’:3})
字典的刪除
pop(key[,default])
? ? key存在,就移除它,并返回它的value
? ? key不存在,返回給定的default
? ? default未設置,key不存在則拋出KeyError異常
popitem()
? ? 移除并返回任意一個鍵值對
? ? 字典為empty,拋出異常
cleat()
? ? 清空字典
字典刪除
del語句
del a[‘c’] 看著像是刪除了一個對象,本質上減少了一個對象的引用,del實際上刪除的是名稱,而不是對象
字典的遍歷
使用for .. in dict:
? ? 遍歷key
? ? for k in d:
?? ?? ? print(k) 返回的是key
? ? for k in d.keys():
?? ?? ? print(k)
? ? 遍歷value
? ? for i in d:
?? ?? ? print(d[i])
? ? for i in d.values():
?? ?? ? print(i)
? ? for i in d.keys():
?? ?? ? print(d.get(i))
? ? 遍歷item,即kv對
? ? for j in d.items():
?? ?? ? print(j)? 返回的是二元元組
? ? for k,j in d.items():#使用封裝和解構
?? ?? ? print(k,j)
總結:keys、values、items方法返回一個類似一個生成器的可迭代對象,不會把函數的結果復制到內存中
字典的遍歷和移除
在進行字典的移除操作,要遍歷的可迭代對象的size不會發生改變,否則回報錯
只有可哈希的才可以作為key
defaultdict
collections.defaultdict([default_factory[,…]])
? ?第一個參數default_factory,缺省是None,它提供一個初始化函數。當key不存在的時候,會調用這個工廠函數來生成key所對應的value
import random
d1 = {}
for i in??‘abcdef’:
????for j in range(random.randint(1,5)):
????????if i not in d1.keys():
????????????d1[i] = []
????????else:
????????????d1[i].append(j)
print(d1)
from collections import defaultdict
import random
d1 = defaultdict(list)
for i in ‘abcdef’:
????for j in range(random.randint(1,5)):
????????d1[i].append(j)
print(d1)
OrderedDict
collections.OrdereDict([items])
? ? key并不是按照加入的順序排列,可以使用OrderedDict記錄排序
有序字典可以記錄元素插入的順序,打印時也是按照這個順序輸出打印
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95428