python dict 字典

字典是經過hash表的原理實現的,每一個元素都是一個鍵值對,經過元素的鍵計算出一個惟一的哈希值,這個hash值決定了元素的地址,所以爲了保證元素地址不同,必須保證每一個元素的鍵和對應的hash值是徹底不一樣的,而且鍵的類型必須是不可修改的,因此鍵的類型可使數值,字符串常量或元組,但不能是列表,由於列表是能夠被修改的。html

因此字典具備下列特性:python

一、元素的查詢和插入操做很快,基本上是常數級別app

二、佔用內存較大,採用的是空間換時間的方法函數

 

參考地址:http://www.cnblogs.com/xianwang/p/4970448.htmlui

 

字典的初始化spa

下面的方法都是等價的.net

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

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

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

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

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

 

賦值元素

一、e = d#引用賦值,e、d始終是同樣的

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

三、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}

 

增長元素

一、d['d'] = 4#直接經過下標添加,若是該鍵值已存在,那就是修改元素了,固然也能夠訪問元素

 

刪除元素

一、d.clear()#刪除d中的全部元素

二、d.pop('a')#刪除鍵值爲‘a’的元素

三、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()區別

參考地址:http://www.jb51.net/article/54116.htm

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

 

參考連接:http://www.tuicool.com/articles/rAzQfq

 

字典合併

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

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

二、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也是能夠合併字典的。

 

排序

#調用sorted()排序
dict = {"a" : "apple", "b" : "grape", "c" : "orange", "d" : "banana"}
print dict  
#按照key排序 
print sorted(dict.items(), key=lambda d: d[0])
#按照value排序 
print sorted(dict.items(), key=lambda 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])
相關文章
相關標籤/搜索