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
下一篇 2018-04-08

相關推薦

  • 函數

    函數、參數、參數解構
    返回值、作用域
    遞歸函數
    匿名函數、
    生成器

    2018-04-16
  • 解析式

    列表解析式和字典解析式 datetime模塊 對日期,時間,時間戳的處理 datetime類 today()返回本地時區當前的datetime對象 now(tz=None)返回當前時間的datetime對象,時間到微秒,如果tz為None,返回和today()一樣 utcnow()沒有時區的當前時間 fromtimestamp(timestamp,tz=Zo…

    2018-04-09
  • Python第三周小結

    經過了三周的學習,我們已經基本完成了Python基礎數據結構的學習,包括列表,字符串,元組,bytes, bytearray, set, 字典等。為了更好的理解和熟練使用這些基本的數據結構,我將它們各自的特點分別總結 并做成了表格,希望能夠幫助我們更好的理解的同時,熟練掌握這些數據結構。    

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

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

    Python筆記 2018-04-01
  • 序列化 Json MessagePack

    序列化 反序列化 pickle模塊
    Json 模塊
    MessagePack

    2018-05-02
  • 高階函數

    高階函數
    柯里化
    裝飾器、文檔字符串
    functools 模塊 inspect 模塊

    2018-04-25
欧美性久久久久