首頁  >  文章  >  後端開發  >  python dict字典詳細說明

python dict字典詳細說明

高洛峰
高洛峰原創
2017-03-08 10:56:032205瀏覽

字典是透過hash表的原理實現的,每個元素都是一個鍵值對,透過元素的鍵計算出一個唯一的雜湊值,這個hash值決定了元素的位址,因此為了保證元素位址不一樣,必須保證每個元素的鍵和對應的hash值是完全不同的,並且鍵的類型必須是不可修改的,所以鍵的類型可以使數值,字串常數或元組,但不能是列表,因為列表是可以被修改的。

所以字典有下列特性:

1、元素的查詢和插入操作很快,基本上是常數等級

2、佔用記憶體較大,採用的是空間換時間的方法

 

字典的初始化

#下面的方法都是等價的

d={' a':1, 'b':2, 'c':3}

d=dict({'a':1, 'b':2, 'c':3})

d = dict([('a',1), ('b', 2), ('c', 3)])

d = dict(a=1, b=2 , c=3)

d = dict(zip(['a', 'b', 'c'], [1,2,3]))#這個方法也可以用來當作將兩個列表合併成一個字典

 

賦值元素

#1、e = d#引用賦值,e、d總是相同的

#1、e = d#引用賦值,e、d總是相同的

2、e = d.copy()#值賦值,二者是沒有關聯的

3、d.copy()是一個淺拷貝,當鍵值對的值遇到字典或列表時,字典或列表也會隨著原來的變化而變化,此時的值相當於元組或列表的引用或指針,而不是其本身,指向的元組或列表其實還是原來的。使用copy模組的deepcopy()方法可以避免這種情況。

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1)

dict1['b'] = 'change'dict1['a'].append('change')print dict1  # {'a': [1, 2, 'change'], 'b': 'change'}print dict2  # {'a': [1, 2, 'change'], 'b': 'change'}print dict3  # {'a': [1, 2, 'change'], 'b': 3}print dict4  # {'a': [1, 2], 'b': 3}

 

#增加元素

1、d['d'] = 4#直接透過下標添加,如果該鍵值已存在,那就是修改元素了,當然也可以存取元素

 

#刪除元素

1、d.clear()#刪除d中的所有元素

2、d.pop('a')#刪除鍵值為'a'的元素

3、del d ['a']#刪除鍵值為'a'的元素

 

# 遍歷元素

for k in d:

  print 'd[%s]=' % k,d[k]

for k,v in d.items():

  print ' d[%s]=' % k,v

for k,v in d.iteritems():

  print 'd[%s]=' % k,v

for k,v in d.viewitems():

  print 'd[%s]=' % k,v

 

items(),iteritems()和viewitems()區別

python2.x的items() 就是傳回一個像上面那樣的包含dict所有元素的list,但由於這樣太浪費內存,所以後來就加入了(註:在Python 2.2開始出現的)iteritems(), iterkeys(), itervalues()這一組函數,用於返回一個iterator 來節省內存,但是迭代器不能反映dict呼叫這個函數之後的變化。所以就加入了viewitems(),始終代表最新的元素。 Python3.x中只有一個items函數,這個函數與2.x中的viewitems()等價。

 

字典合併

1、dd = dict(dict1.items() + dict2.items())

#但是這種效率不高,透過上面的分析指導,它實際上是調用items先返回對應的列表,然後執行列表相加,最後再按照列表初始化成字典的形式進行初始化

2、 dd = dict(dict1, **dict2)

字典的鍵必須是字串。在Python 2(解釋器是CPython)中,我們可以使用非字串作為鍵,但別被騙了:這種hack只是湊巧在使用標準CPython運行環境的Python 2中才有效。

上面語句相當於

dd = dict1.copy()

#dd.update(dict2)

其中的dd.update(dict2)又相當於

for k in dict2

  dd[k] = dict2[k]

可知update的作用不僅可以添加不存在的元素,還能修改已存在的鍵的元素值。

並且透過上面知道透過update和for...in也是可以合併字典的。

 

排序

dict = { : ,  : ,  : ,  :  sorted(dict.items(), key= sorted(dict.items(), key= d: d[1])

ls = list(dict.keys())
ls.sort()
for k in ls:
    print(k, dict[k])

for k in sorted(dict.keys()):
    print(k, dict[k])
###### ####

以上是python dict字典詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn