Python內置數據結構(字典)

字典

字典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

(0)
SignalSignal
上一篇 2018-04-08 17:06
下一篇 2018-04-08 17:08

相關推薦

  • Python 部分知識點總結(六)

    此篇博客只是記錄第八周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-05-02
  • 函數與生成器

    函數 由若干語句組成的語句塊,函數名,參數列表構成,是組織代碼的最小單元,完成一定的功能,結構化編程對代碼的最基本的封裝,封裝的目的是為了復用 函數中沒有return,隱式會返回一個none值 定義中的參數列表成為形式參數,只是一種形式表達,簡稱形參 調用時寫的參數是實際參數,是實實在在傳入的值,簡稱實參 函數的定義,只是聲明了參數,不會執行,可以進行調用,…

    2018-04-16
  • 內置數據結構

    list,tuple,str,bytes,bytearray,set,切片,分裝解構,冒泡法

    2018-03-31
  • 樹 概念


    二叉樹

    2018-04-16
  • 封裝與解構 集合

    封裝和解構 封裝:將多個值進行分割,結合在一起,本質上返回元組,只是省掉了小括號 ‘==‘意思為內容一致,‘=’意思為內存空間一致 解構:把線性結構的元素解開,并順序的賦值給其他變量,左邊接納的變量數要和左邊解開的元素數量一致 集合不是非線性 解構中使用*變量名接收,但不能單獨使用,被*變量名收集后組成一個列表 第一個下劃線為9,結果被第二個下劃線重新賦值為…

    Python筆記 2018-04-01
  • 異常、模塊、分發、插件化開發、插槽和反向等

    異常、模塊、分發、插件化開發、插槽和反向等

    Python筆記 2018-05-22
欧美性久久久久