python基礎教程之字典操作詳解

來源:互聯網
上載者:User
字典
dictionary

1.索引值對的集合(map)

2.字典是以大括弧“{}”包圍的資料集合

3.字典是無序的,在字典中通過鍵來訪問成員。 可變的,可嵌套,可以原處修改擴充等,不產生新的字典

4.字典的鍵,可以是字串(大小寫敏感),數字常量或元組(不可變類型),同一個字典的鍵可以混用類型。字典的鍵必須是可雜湊的

元組作為鍵的條件是,元組內的值都是不可變類型

代碼如下:


a = (1,2) #可以作為鍵
b = (1,2,[3,4]) #不可以

5.字典的值可以是任意類型,可以嵌套,可以自由修改

聲明
建立字典的幾種方式:

1.基本

代碼如下:


d = {} #空字典
d = {'name':'tom', 'age':22}
#等價
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict

代碼如下:


d = dict() #空
d = dict(name='tom', age=22)

d = dict([('name','tom'), ('age',22)])
#等價
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys

不指定default_value的話,預設None

代碼如下:


>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

基本操作

0.擷取協助

代碼如下:


help(dict)


1.判定鍵是否存在於字典中

代碼如下:


if k in d: #k not in
dosomething()

2.讀取

代碼如下:


d = {'a':1, 'b':2}
print d['a'] #得到1,但是若鍵不存在,將引發異常KeyError。慎用,建議不使用


print d.get('c', 3) #得到3,get方法,若是鍵不存在,返回第二個參數default_value.若是沒有設default_value返回None
處理missing-key錯誤三種方式,根據具體需要

代碼如下:


if k in d:
print d[k]

try:
print d[k]
except KeyError:
dosomething()

print d.get(k, default)
#等價 d[k] if k in d else default

3.遍曆

方式1:

代碼如下:


for key in d:
print key, d[key]
#等價 for key in d.keys()

方式2:

代碼如下:


for key,value in d.items():
print key, value

4.修改方式1:某個索引值對

代碼如下:


d['key'] = 'newvalue'

方式2:大量新增或更新

代碼如下:


#另一個字典
d.update({'key':'newvalue'}) #這裡支援一整組值

#元組列表
d.update( [ ('a',1), ('b',2) ] ) #每個元組兩個元素,(key,value)

#**key
d.update(c=3, e=4)

5.刪除

代碼如下:


del d['key']
value = d.pop('key') #刪除並傳回值
d.clear() #清空
6.其他:

len(d) #長度
d.keys() #key列表
d.values() #value列表
d.items() #(key, value) 列表
c = d.copy() #淺拷貝
#返回迭代器,節省記憶體
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原來沒有,設定,否則原值不變

其他
1.字典排序按照key排序

代碼如下:


keys = d.keys()
keys.sort()
for key in keys:
print d.get(key)

按照value進行排序

代碼如下:


sorted(d.items(), lambda x,y: cmp(x[1],y[1]))


另外:

代碼如下:


#假設d為字典
sorted(d) #返回同 sorted(d.keys()),返回的是key排序

2.自訂對象作為key

必須:

代碼如下:


def __hash__(self):
pass
def __eq__(self, other):
pass

3.字典拷貝淺拷貝:

代碼如下:


c = d.copy() #


深拷貝必須用copy模組

代碼如下:


form copy import deepcopy
c = deepcopy(d)

4.一種使用情境假設有一個很大的列表l,假設10w條記錄

有一個小列表b,要判斷b中元素是否在l中

如果:

代碼如下:


for i in b:
if i in l:
dosomething()

你會發現非常非常慢...因為第二個in語句,會遍曆10w條….

改進:

代碼如下:


d = dict.fromkeys(l)
for i in b:
if i in d:
dosomething()
#空間換時間,O(n) -> O(1)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.