Python基礎知識之字典

格瑞姆瑞坡發表於2019-02-16

字典的表現形式為:{key:value},鍵和值之間用冒號分隔,每個鍵值對兒之間用逗號分隔,比如{‘name’:’超人’,’age’:500},要注意key的型別必須是不可變的型別,python對key進行雜湊函式運算,根據計算結果決定value的儲存地址,所以字典是無序儲存的。字典的增刪改查如下:

可以通過直接賦值的方式對字典進行修改,當指定的鍵不存在時則會在末尾增加一對兒鍵值

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
dic[`age`] = 20
dic[`lover`] = `小昭`
print(dic)
輸出:
{`name`: `劉先生`, `age`: 20, `job`: `工程師`, `marr`: `已婚`, `lover`: `小昭`}

還可以使用setdefaultv(key,value)方法來增加鍵值對兒
如果key存在則不錯任何改動,如果key不存在,則會在末尾新增新的鍵值,並且如果不給定value的話預設為None
一句話概括就是“有就不管他,沒有就增加”,這在迴圈中可以利用這一點

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
dic.setdefault(`name`,`超人`)
dic.setdefault(`lover`,`小姐姐`)
print(dic)
輸出:
{`name`: `劉先生`, `age`: `39`, `job`: `工程師`, `marr`: `已婚`, `lover`: `小姐姐`}

刪: pop() clear del

pop 刪除指定的key對應的value,並且返回刪除的value,如果key不存在則會報錯。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
res = dic.pop(`name`)
print(dic,`返回值:`,res)
輸出:
{`age`: `39`, `job`: `工程師`, `marr`: `已婚`} 返回值: 劉先生

在使用pop()時還可以增加一個引數來指定返回值,如果給定的key不存在則會返回給定的返回值.這種方式非常好用,可以防止key不存在時報錯,如果存在則刪除,不存在則返回指定的字串。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
res = dic.pop(`小三兒`,`查無此人`)
print(`返回值:`,res)
輸出:
返回值: 查無此人

clear 用於清空字典。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
dic.clear()
print(dic)
輸出:
{}

del 用於刪除指定的鍵值,如果只給出字典名字時則會刪除整個字典物件

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
del dic[`name`]
#del dic
print(dic)
輸出:
{`age`: `39`, `job`: `工程師`, `marr`: `已婚`}

改: 見“增”

查:

可以直接指定鍵來訪問字典,有則返回對應的值,沒有則報錯:

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
a = dic[`name`]
print(a)
輸出:
劉先生

可以通過字典的三個方法keys(),values(),items()分別查詢所有的鍵、值、鍵值對兒。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
a = dic.keys()
b = dic.values()
c = dic.items()
print(`keys():`,a)
print(`values():`,b)
print(`items():`,c)
輸出:
keys(): dict_keys([`name`, `age`, `job`, `marr`])
values(): dict_values([`劉先生`, `39`, `工程師`, `已婚`])
items(): dict_items([(`name`, `劉先生`), (`age`, `39`), (`job`, `工程師`), (`marr`, `已婚`)])

還可以用for迴圈遍歷這三個方法來分別獲得鍵值。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
for k in dic.keys():
    print(k)
輸出:
name
age
job
marr
dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
for v in dic.values():
    print(v)
輸出:
劉先生
39
工程師
已婚
dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
for k,v in dic.items():
    print(k,v)
輸出:
name 劉先生
age 39
job 工程師
marr 已婚

字典的其他方法

len(dict)
計算字典元素個數。
str(dict)
把字典專戶為字串,如:

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
a = str(dic)
import re
res = re.search(r`name`,a)
print(res)
輸出:
<_sre.SRE_Match object; span=(2, 6), match=`name`>

因為把dic轉化為字串並賦值給a,所以可以對a進行正則匹配
而如果直接對dic進行正則匹配則報錯,因為dic不是字串型別。

copy()
返回一個字典的淺複製

dict.fromkeys(seq,`value`)
以序列seq中的元素作為字典的鍵,value為初始值 建立字典,如果不給引數value的話則每個鍵對應的值為Non,注意:這是一個“類方法”,所以使用時前面要加dict.

seq = [`a`,1,`b`]
a = dict.fromkeys(seq,`value`)
print(a)
輸出:
{`a`: `value`, 1: `value`, `b`: `value`}

get(key, default=None)
返回指定鍵的值,如果鍵不存在則返回default值。

popitem()
刪除並返回字典的一個鍵值對,如果字典為空則會報錯。

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
res1 = dic.popitem()
res2 = dic.popitem()
res3 = dic.popitem()
print(res1,res2,res3,dic)
輸出:
(`marr`, `已婚`) (`job`, `工程師`) (`age`, `39`) {`name`: `劉先生`}

update([other])
用鍵值對兒更新字典,如果鍵已經存在則會替換對應的值,引數為另外一個字典或者可迭代的鍵值對兒,比如:

dic = {`name`:`劉先生`,`age`:`39`,`job`:`工程師`,`marr`:`已婚`}
it = ((i,i**2) for i in range(1,4))
dic.update(it)
print(dic)
輸出:
{`name`: `劉先生`, `age`: `39`, `job`: `工程師`, `marr`: `已婚`, 1: 1, 2: 4, 3: 9}
也可以用下面的方式指定鍵對應的值,比如
dic.update(name = `李小姐`,age = 22)

相關文章