天天看點

dict字典的基本使用

字典dict

  • 字典是一個非線性結構,是key-value組成的鍵值對的資料集合。
  • 字典的特點:可變的、無序的、key不重複。

字典的定義

  • 【{}或者dict()】可以定義一個空字典
  • 例如:
a = dict()
b = {}
print(a,b,type(a),type(b))      
  • 【dict(**kwargs)】可以使用name=value鍵值對,初始化一個字典
  • 例如:
c = dict(gdy="abc",x=90,y=100)
print(c,type(c))      
  • 【dict(iterable,**kwarg)】使用可疊代對象和name = value度構造字典、不過可疊代對象的元素必須是一個二進制結構
  • 例如:
d = dict((("a","001"),("b","002")))
print(d,type(d))      
  • 【dict(mapping,**kwarg)】使用一個字典建構另一個字典
  • 例如:
e = {"a":10,"b":20,"c":30}
f = dict(e,abc="20")
print(e,f)      
  • 【{}】直接定義:例如:e = {“a”:10,“b”:20,“c”:30}
  • fromkeys(iterable,value) 【類方法】 #根據建集合初始化一個字典
  • iterable :為可疊代的鍵值集合
  • value:為預設所有建對應的預設值。(可以不寫,如果沒有預設為None)
  • 例如:
a = dict.fromkeys(range(10),0)
b = dict.fromkeys(range(10))
print(a)
print(b)      

字典元素的通路

  • 【d[key]】 傳回可用對應的值value,如果可以不存在會抛出keyError異常
  • 【get(key[,default])】 傳回key對應的值value,如果key不存在就傳回預設值default,缺失值預設為None
  • 【setdefault(key[,default])】傳回key對應的值value,如果key不存在,添加kv對,value設定為default,并傳回default,如果default沒有設定,則傳回None
  • 【keys()】擷取字典中所有key的集合
  • 【values()】或者字典中所有值values的集合
  • 【items()】擷取字典中所有鍵值對組成的集合

字典增加和修改

  • 【d[key] = value】将key對象的值修改為value,如果key不存在就添加新的key對應value
  • 【update([other])—>None】 使用一個字典裡面的資料對本字典的更新,如果key不存在就添加,key存在就覆寫已經存在的key對應的值。 就地修改,無傳回值
  • 例如:
a = {"1":10,"2":100,"3":200,"b":10,"c":20}
print(a)
a.update(b=100) #更新鍵值為b的值為100
print(a)
a.update([("1","ab")]) #将鍵值"1"的值修改為"ab"
print(a)
c = a.setdefault(1,5)  #擷取鍵值為1對應的value的值,如果沒有就插入鍵值對1,5 ,并傳回預設值
c2 = a.setdefault(1,6) #擷取鍵值為1對應的value的值,如果沒有就插入鍵值對1,6,濱傳回預設值
print(a,c,c2)
a.update([(1,2)])  #将鍵值對key=1的值修改為2,如果沒有找到鍵值為1,就添加鍵值對1,2
print(a)
a.update([(1,5)])  #将鍵值為1對應的值修改為5
print(a)      

字典的删除

  • 【pop(key[,default])】 将key對應的值删除,并傳回key對應的值。如果key不存在就傳回預設值defalut。如果未設定default,并且key不存在會抛出異常keyError
  • 【popitem()】移除并傳回任意的鍵值對,字典為empty空時會抛出異常KeyError
  • 【clear()】清空字典
  • 【del d[key]】 删除指定key的鍵值對
  • 相關參數 del語句
  • 例如【del a[‘c’]】看着像删除了一個對象,本質上減少了一個對象的引用,del實際上删除的是名稱,而不是對象。
a = True
b = [1,2]
c = [b,3]
print(a,b,c)
del a  #将變量a的名稱删除
#print(a)  #會報錯,因為變量a已經不存在
del b  #将變量b的名稱删除
print(c)      

字典的周遊

  • list(d.keys()) 根據字典的建集合或對應的list集合

    注意:【for i in a.keys() 】等價于【for i in a】或者直接使用如下方法直接周遊出元素和元組

    【for i,k in a.items()】

  • 例如:
a = dict(a=1,b=2,c=3,d=4,e=5)
print(a.keys())
b = list(a.keys())
print(b)
for i in a.keys(): print(i)   #列印所有key的值
print("-----------------")
for k in a : print(k)      

總結

  • python3中 keys、values、items方法傳回一個類似生成器的可疊代對象,不會吧函數的傳回結果複制到記憶體中,傳回的對象可以使用len()、iter()、in操作
  • 傳回Dictionary view對象,可以使用len()、iter()、in操作
  • 字典的entry的動态視圖,字典變化,視圖将反映出這些變化
  • keys傳回一個類set對象,也就是可以看做一個set集合
  • 如果values都可以hash,那麼items也可以看做是類set對象
  • python2中上述方法傳回的是一個新清單,占用新的記憶體空間。是以Python2建議使用iterkeys、itervalues、iteritems版本,傳回一個疊代器,而不是傳回一個copy

相關字典

預設字典(defaultdict)

  • 需要導入子產品import collections
  • 定義方式:
import collections
defdict = collections.defaultdict(dict) #建立一個預設值為dict的預設字典。
deflist = collections.defaultdict(list) #建立一個預設值為list的預設字典。
defset = collections.defaultdict(set)  #建立一個預設值為set的預設字典。
defdict["c"] = 1
defdict.update([("a","b")])
deflist["a"] = 1
defset["b"] = 1
for i in range(5):
    deflist[i].append(i) #當key=i的鍵對應的值不存在是,預設建立一個key對應的list集合。并在集合中添加i元素
    defset[i].update([(i,i)]) #當key=i的鍵對應的值不存在是,預設建立一個key對應的set集合。并在集合中添加i元素
    defdict[i].update([(i,i)]) #當key=i的鍵對應的值不存在是,預設建立一個key對應的dict集合。并在集合中添加i元素
print(defdict,deflist,defset,sep="\n")      

有序字典(OrderedDict)

  • 和defaultdict一樣,需要導入子產品import collection
  • 定義方式和defaultdict類似。但不同的是OrderedDict是有序字典,裡面元素的排列順序是元素的插入順序。
  • 注意:3.6版本中的Python的字典就是記錄key插入的順序(IPython不一定有效)
  • 簡單示例
import collections
order = collections.OrderedDict() #執行個體化一個有序字典
order.update([(4,10)]) # 插入鍵值對4,10
for i in range(5):   #給字典插入新元素
        order[i] = i
order.setdefault(6,10)  #給字典插入新元素
print(order.keys())
print(order.values())
print(order)      
  • 有序字典排序
  • sorted(iterable, /, *, key=None, reverse=False) 函數會傳回一個新的字典對象
  • 例如:
import random,string
word = { _:2 for _ in [random.choice(string.ascii_lowercase) for _ in range(20)]}  #随機生成20個字母組成的字典
print(word)
wordsort = sorted(word.items())  #使用sorted将字典,按照key排序。
print(wordsort)      

字典與list結合使用:

  • 可以使用字典記錄元素。在加個清單list記錄存在字典中元素的實際位置,用清單的順序記錄在字典中對應元素的大小。這樣在使用list周遊時,可以保證在清單中元素的順序。而再查找元素時使用字典查找,保證了檢索的速度,避免了list的缺點。

繼續閱讀