1. 程式人生 > >教表弟學了半個月的Python!他居然才學會字典!五分鐘學會的東西

教表弟學了半個月的Python!他居然才學會字典!五分鐘學會的東西

今天不是禮拜五嘛。我姑媽帶著我表弟來到我家玩!然後和我媽嘮嗑嘛!然後就扯到我的工作上面來了!我就是一個小萌新,大佬帶著能拿個10k左右,所以我姑媽就問起了我這個行業,我說了大大小小一堆,然後他們估計也聽不懂!我表弟呢,是個高中畢業就沒上學了的小老弟。給他姑媽守守小賣部的, 所以文化水平嘛。不算高不算低。但是沒有一份工作,她就想要表弟也像我一樣,能找個好企業,鍛鍊一下,然後就喊我跟著我學一下,我也沒辦法。只能耐著性子教咯!然後半個月下來,我才發現他比我想象的有點差別!這是我給他的資料的一小部分,我覺得很通俗易懂了啊!沒有比這個資料還小白了吧!

什麼是字典?

字典是另一種可變容器模型,且可儲存任意型別物件。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

鍵必須是唯一的,但值則不必。

值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。

一個簡單的字典例項:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
#也可如此建立字典:
dict1 = { 'abc': 456 };
dict2 = { 'abc': 123, 98.6: 37 };

 

訪問字典裡的值

把相應的鍵放入到方括號中,如下例項:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

輸出結果如下:

dict['Name']: Runoob
dict['Age']: 7

 

修改字典

向字典新增新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對如下例項:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # 更新 Age
dict['School'] = "菜鳥教程" # 新增資訊
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

輸出結果如下:

dict['Age']: 8
dict['School']: 菜鳥教程

 

刪除字典元素

能刪單一的元素也能清空字典,清空只需一項操作。

顯示刪除一個字典用del命令,如下例項:

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 刪除鍵 'Name'
dict.clear() # 清空字典
del dict # 刪除字典

 

字典鍵的特性

字典值可以是任何的 python 物件,既可以是標準的物件,也可以是使用者定義的,但鍵不行。

兩個重要的點需要記住:

1)不允許同一個鍵出現兩次。建立時如果同一個鍵被賦值兩次,後一個值會被記住,如下例項:

dict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鳥'}
print ("dict['Name']: ", dict['Name'])

輸出結果如下:

dict['Name']: 小菜鳥

 

2)鍵必須不可變,所以可以用數字,字串或元組充當,而用列表就不行,如下例項:

dict = {['Name']: 'Runoob', 'Age': 7}
print ("dict['Name']: ", dict['Name'])

執行會出錯。

dict()函式

dict() 函式用於建立一個字典。

以下例項展示了 dict 的使用方法:

>>>dict() # 建立空字典
{}
>>> dict(a='a', b='b', t='t') # 傳入關鍵字
{'a': 'a', 'b': 'b', 't': 't'}
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 對映函式方式來構造字典
{'three': 3, 'two': 2, 'one': 1} 
>>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代物件方式來構造字典,也可以把中括號改為小括號。
{'three': 3, 'two': 2, 'one': 1}

 

介紹一些dict()函式的BIF

fromkeys()

fromkeys()函式用於建立一個新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對應的初始值。

fromkeys()方法語法:dict.fromkeys(seq[, value])

seq -- 字典鍵值列表。

value -- 可選引數, 設定鍵序列(seq)的值。

以下例項展示了 fromkeys()函式的使用方法:

seq = ('Google', 'Runoob', 'Taobao')
dict = dict.fromkeys(seq)
print("新字典為 : %s" % str(dict))
dict = dict.fromkeys(seq, 10)
print("新字典為 : %s" % str(dict))

輸出結果如下:

新字典為 : {'Google': None, 'Runoob': None, 'Taobao': None}
新字典為 : {'Google': 10, 'Runoob': 10, 'Taobao': 10}

 

copy()

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

copy()方法語法:dict.copy()

以下例項展示了 copy()函式的使用方法:

dict1 = {'Name': 'Zara', 'Age': 7};
dict2 = dict1.copy()
print("New Dictinary : %s" % str(dict2))

輸出結果如下:

New Dictinary : {'Name': 'Zara', 'Age': 7}

值得注意的是,直接賦值和 copy 是有區別的

可以通過以下例項說明:

dict1 = {'user':'runoob','num':[1,2,3]}
dict2 = dict1 # 淺拷貝: 引用物件
dict3 = dict1.copy() # 淺拷貝:深拷貝父物件(一級目錄),子物件(二級目錄)不拷貝,還是引用
# 修改 data 資料
dict1['user']='root'
dict1['num'].remove(1)
# 輸出結果
print(dict1)
print(dict2)
print(dict3)

輸出結果如下:

{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'runoob', 'num': [2, 3]}

例項中 dict2 其實是 dict1 的引用(別名),所以輸出結果都是一致的,dict3 父物件進行了深拷貝,不會隨dict1 修改而修改,子物件是淺拷貝所以隨 dict1 的修改而修改。

keys()

keys() 函式以列表返回一個字典所有的鍵

keys()方法語法:dict.keys()

以下例項展示了 keys()函式的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
print("Value : %s" % dict.keys())

輸出結果如下:

Value : dict_keys(['Name', 'Age'])

 

values()

values() 函式以列表返回字典中的所有值

values()方法語法:dict.values()

以下例項展示了 values()函式的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
print("Value : %s" % dict.values())

輸出結果如下:

Value : dict_values(['Zara', 7])

 

items()

items() 函式以列表返回可遍歷的(鍵, 值) 元組陣列

items()方法語法:dict.items()

以下例項展示了 items()函式的使用方法:

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print("字典值 : %s" % dict.items())
# 遍歷字典列表
for key,values in dict.items():
 print(key,values)

輸出結果如下:

字典值 : dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])
Google www.google.com
Runoob www.runoob.com
taobao www.taobao.com

 

get()

get() 函式返回指定鍵的值,如果值不在字典中返回預設值。

get()方法語法:dict.get(key, default=None)

key -- 字典中要查詢的鍵。

default -- 如果指定鍵的值不存在時,返回該預設值值。

返回指定鍵的值,如果值不在字典中返回預設值None。

以下例項展示了 get()函式的使用方法:

dict = {'Name': 'Zara', 'Age': 27}
print("Value : %s" % dict.get('Age'))
print("Value : %s" % dict.get('Sex'))

輸出結果如下:

Value : 27
Value : None

 

pop()

pop() 方法刪除字典給定鍵 key 及對應的值,返回值為被刪除的值。key 值必須給出。 否則,返回 default 值

pop()方法語法:pop(key[,default])

key: 要刪除的鍵值

default: 如果沒有 key,返回 default 值

以下例項展示了 pop() 方法的使用方法:

site= {'name': '菜鳥教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.pop('name')
print(pop_obj) # 輸出 :菜鳥教程

輸出結果如下:

菜鳥教程

 

popitem()

popitem() 方法隨機返回並刪除字典中的一對鍵和值

如果字典已經為空,卻呼叫了此方法,就報出KeyError異常

popitem()方法語法:popitem()

以下例項展示了 popitem() 方法的使用方法:

site= {'name': '菜鳥教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)
print(site)

輸出結果如下:

('url', 'www.runoob.com')
{'name': '菜鳥教程', 'alexa': 10000}

 

update()

update() 函式把字典dict2的鍵/值對更新到dict裡

update()方法語法:

dict.update(dict2)

dict2 -- 新增到指定字典dict裡的字典

該方法沒有任何返回值

以下例項展示了 update()函式的使用方法:

dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }
dict.update(dict2)
print("Value : %s" % dict)

輸出結果如下:

Value : {'Name': 'Zara', 'Age': 7, 'Sex': 'female'}

私信小編即可獲取我發給我表弟的一些資料和PDF哦! 進群:548377875  

setdefault()

setdefault() 函式和get() 方法類似, 如果鍵不存在於字典中,將會新增鍵並將值設為預設值

setdefault()方法語法:dict.setdefault(key, default=None)

key -- 查詢的鍵值。

default -- 鍵不存在時,設定的預設鍵值。

如果字典中包含有給定鍵,則返回該鍵對應的值,否則返回為該鍵設定的值

以下例項展示了 setdefault() 函式的使用方法:

dict = {'runoob': '菜鳥教程', 'google': 'Google 搜尋'}
print("Value : %s" % dict.setdefault('runoob', None))
print("Value : %s" % dict.setdefault('Taobao', '淘寶'))
print("Value : %s" % dict.setdefault('runb'))
print(dict)

輸出結果如下:

Value : 菜鳥教程
Value : 淘寶
Value : None
{'runoob': '菜鳥教程', 'google': 'Google 搜尋', 'Taobao': '淘寶', 'runb': None}

 

思考題

1.嘗試利用字典的特性編寫一個通訊錄程式吧,功能如圖:

 

教表弟學了半個月的Python!他居然才學會字典!五分鐘學會的東西