99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時代Python字典操作零基礎(chǔ)學(xué)習(xí),一步到位
Python字典操作零基礎(chǔ)學(xué)習(xí),一步到位
2021-09-08
收藏

來源:Python數(shù)據(jù)之道

作者:陽哥

大家好,我是陽哥。

字典(dict)是 python 中的基礎(chǔ)數(shù)據(jù)類型之一,字典的設(shè)計并不復(fù)雜,我們經(jīng)常會用到這種數(shù)據(jù)類型。

同時,字典也有一些比較實(shí)用的情景。

學(xué)習(xí)任何一種編程語言,基礎(chǔ)數(shù)據(jù)類型都是必備的底層基礎(chǔ),今天,我們來學(xué)習(xí)下 Python 中字典的使用。

主要內(nèi)容包括:

  • 字典的基本用法
  • 字典推導(dǎo)式
  • 嵌套字典

01、基本用法

在 Python 中,字典是一種可以將相關(guān)的兩個信息關(guān)聯(lián)起來的操作,并且字典可存儲的信息量幾乎不受限制。

字典是 Python 提供的一種常用的數(shù)據(jù)結(jié)構(gòu),它用于存放具有映射關(guān)系的數(shù)據(jù)。為了保存具有映射關(guān)系的數(shù)據(jù),Python 提供了字典,字典相當(dāng)于保存了兩組數(shù)據(jù),其中一組數(shù)據(jù)是關(guān)鍵數(shù)據(jù),被稱為 key;另一組數(shù)據(jù)可通過 key 來訪問,被稱為 value。

創(chuàng)建字典

字典是以 key、value 的形式創(chuàng)建的。

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

d = {key1 : value1, key2 : value2 }

一般情況下,字典的創(chuàng)建可以有以下幾種方式:

# 創(chuàng)建一個空的字典 my_dict1 = {} # 創(chuàng)建 key 值為整數(shù)的字典 my_dict2 = {1: 'apple', 2: 'ball'} # 創(chuàng)建 key 值為 string 的字典 my_dict3 = {'name1': 'apple', 'name2': 'ball'} # 創(chuàng)建 key 值為 數(shù)字 和 string 混合的字典 my_dict4 = {'name': 'apple', 1: [2, 4, 3]} # 用 dict() 函數(shù)創(chuàng)建字典 my_dict5 = dict({1:'apple', 2:'ball'}) # 以元組的形式組成序列創(chuàng)建字典 my_dict6 = dict([(1,'apple'), (2,'ball')]) print('my_dict1:', my_dict1) print('my_dict2:', my_dict2) print('my_dict3:', my_dict3) print('my_dict4:', my_dict4) print('my_dict5:', my_dict5) print('my_dict6:', my_dict6)

結(jié)果如下:

my_dict1: {} my_dict2: {1: 'apple', 2: 'ball'} my_dict3: {'name1': 'apple', 'name2': 'ball'} my_dict4: {'name': 'apple', 1: [2, 4, 3]} my_dict5: {1: 'apple', 2: 'ball'} my_dict6: {1: 'apple', 2: 'ball'}

也可以通過下面的方式來創(chuàng)建空白字典

# 創(chuàng)建空白字典的另一種方式 my_dict7 = dict()  # print('my_dict7:', my_dict7) my_dict7

結(jié)果如下:

{}

獲取字典中的元素

通過 key 來獲取 value

獲取字典中的元素,可以直接通過 key 值來獲取對應(yīng)的 value,如下:

my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3]} print(my_dict8['name']) print(my_dict8.get('name'))

結(jié)果如下:

John John

請注意,如果字典的key值中沒有該元素,則不能獲取相應(yīng)的 value,這種情況下產(chǎn)生錯誤。

print(my_dict8['name1'])

結(jié)果如下:

--------------------------------------------------------------------------- KeyError                                  Traceback (most recent call last)

    python-input-4-eedb02e2ace8> in <module> ----> 1 print(my_dict8['name1']) KeyError: 'name1' python-

通過 value 來獲取 key

通過 value 來獲取 key 值,在 Python 中并沒有提供直接的方法,我們可以通過自定義函數(shù)來實(shí)現(xiàn),如下:

def get_keys(d, value): return [k for k,v in d.items() if v == value]

函數(shù)中,d 是字典。

在字典中修改或添加元素

在字典中,可以修改已有 key 對應(yīng)的 value 值,或者添加新的 key-value 鍵值對數(shù)據(jù),如下:

my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3]} # 修改已有 key 對應(yīng)的 value 的值 my_dict8['age'] = 98 # 添加新的 key-value 數(shù)據(jù)組 my_dict8['gender'] = 'man' my_dict8

結(jié)果如下:

{'name': 'John', 'age': 98, 1: [2, 4, 3], 'gender': 'man'} 

從字典中刪除元素

從字典中刪除元素,或者刪除整個字典,有以下一些方式。

pop() 方法

移除字典數(shù)據(jù)pop()方法的作用是:刪除指定給定鍵所對應(yīng)的值,返回這個值并從字典中把它移除。

# 使用 pop()方法來刪除 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3]} my_dict8.pop('age') my_dict8 

結(jié)果如下:

{'name': 'John', 1: [2, 4, 3]} 

del 方法

# 使用 del 方法來刪除 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3]} del my_dict8['name']

my_dict8

結(jié)果如下:

{'age': 25, 1: [2, 4, 3]} 

popitem() 方法

# 使用 popitem()方法來刪除 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man', 'school': 'UCI', 'city': 'NewYork'}

my_dict8.popitem()

my_dict8

結(jié)果如下:

{'name': 'John', 'age': 25, 1: [2, 4, 3], 'gender': 'man', 'school': 'UCI'}

關(guān)于 popitem() 方法:

在Python 3.5版本以及之前的時候,使用 popitem() 可能是隨機(jī)刪除的,但我曾經(jīng)用的 Python3.6版本,好像不是隨機(jī)刪除的,是刪除的最后一項。

從 Python 3.7 版本開始,使用 popitem() 方法是刪除最后一項,因?yàn)樽值淠J(rèn)是記住了順序的:

Ordered dictionaries are just like regular dictionaries but have some extra capabilities relating to ordering operations.


They have become less important now that the built-in dict class gained the ability to remember insertion order (this new behavior became guaranteed in Python 3.7).

另外,我查閱了一下 Python3.7 版本中的描述,如下:

popitem()


Remove and return a (key, value) pair from the dictionary. Pairs are returned in LIFO order.


popitem() is useful to destructively iterate over a dictionary, as often used in set algorithms. If the dictionary is empty, calling popitem() raises a KeyError.


Changed in version 3.7: LIFO order is now guaranteed. In prior versions, popitem() would return an arbitrary key/value pair.


https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

在 Python3.7 版本中,是按照 LIFO 的原則進(jìn)行刪除的,是有序進(jìn)行刪除的。

LIFO (Last-in, first-out)即后進(jìn)來的先刪除(也可理解為按后面往前的排序進(jìn)行刪除)

clear()方法

clear()方法是用來清除字典中的所有數(shù)據(jù),因?yàn)槭窃夭僮?,所以返?nbsp;None(也可以理解為沒有返回值)

# 使用 clear()方法來清空字典中的所有數(shù)據(jù),返回的是一個空字典 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} my_dict8.clear() my_dict8 

結(jié)果如下:

{}

del 方法

del 方法可以刪除字典中指定 key 值的內(nèi)容。

另外, del 可以刪除整個字典,與 clear() 方法的清空字典中所有數(shù)據(jù)是不一樣的。演示如下:

使用 del方法是刪除字典中指定 key 值對應(yīng)的內(nèi)容

# 使用 del方法是刪除字典中指定 key 值對應(yīng)的內(nèi)容 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} del my_dict8['age']

my_dict8

結(jié)果如下:

{'name': 'John', 1: [2, 4, 3], 'gender': 'man'}

使用 del方法是刪除整個字典,刪除后,再運(yùn)行程序,會報錯誤

# 使用 del方法是刪除整個字典,刪除后,再運(yùn)行程序,會報錯誤 my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} del my_dict8

my_dict8

結(jié)果如下:

--------------------------------------------------------------------------- NameError                                 Traceback (most recent call last)

    python-input-11-3d2a02242727> in <module> 4 del my_dict8 5 ----> 6 my_dict8 NameError: name 'my_dict8' is not definedpython-

字典內(nèi)置函數(shù)&方法

Python字典包含了以下內(nèi)置函數(shù):

序號函數(shù)及描述len(dict)計算字典元素個數(shù),即鍵的總數(shù)。str(dict)輸出字典可打印的字符串表示。type(variable)返回輸入的變量類型,如果變量是字典就返回字典類型。

len(), str(), type() 函數(shù)

my_dict6 = dict([(1,'apple'), (2,'ball')])
my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} print(len(my_dict8)) print(str(my_dict6)) print(type(my_dict8))

結(jié)果如下:

4 {1: 'apple', 2: 'ball'}
    <class 'dict'> 

Python字典包含以下一些方法:

函數(shù)函數(shù)描述clear()刪除字典內(nèi)所有元素,返回空字典copy()返回一個字典的淺復(fù)制fromkeys(seq[, val])創(chuàng)建一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應(yīng)的初始值get(key, default=None)返回指定鍵的值,如果值不在字典中返回 default 值items()以列表返回可遍歷的(鍵, 值) 元組數(shù)組keys()以列表返回一個字典所有的鍵setdefault(key, default=None)和 get()類似, 但如果鍵不存在于字典中,將會添加鍵并將值設(shè)為 defaultupdate(dict2)把字典 dict2 的鍵/值對更新到 dict里values()以列表返回字典中的所有值pop(key[,default])刪除字典給定鍵 key 所對應(yīng)的值,返回值為被刪除的值。
key 值必須給出。否則,返回 default值。popitem()隨機(jī)返回并刪除字典中的一對鍵和值。
Python 3.6及以后版本,以 LIFO 的原則進(jìn)行刪除的,是有序進(jìn)行刪除的。

clear(), get(), pop(), popitem() 等在上面已介紹的方法,這里不做重復(fù),僅演示其他方法的使用。

copy, keys, values, items 方法

my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} print('copy:', my_dict8.copy()) print('keys:', my_dict8.keys()) print('values:', my_dict8.values()) print('items:', my_dict8.items())

結(jié)果如下:

copy: {'name': 'John', 'age': 25, 1: [2, 4, 3], 'gender': 'man'} keys: dict_keys(['name', 'age', 1, 'gender']) values: dict_values(['John', 25, [2, 4, 3], 'man']) items: dict_items([('name', 'John'), ('age', 25), (1, [2, 4, 3]), ('gender', 'man')])

update 方法

通過 update 方法,可以更新字典的數(shù)據(jù)內(nèi)容:

my_dict6 = {'name': 'Lemon', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} my_dict8.update(my_dict6) my_dict8 

結(jié)果如下:

{'name': 'Lemon', 'age': 25, 1: [2, 4, 3], 'gender': 'man'} 

fromkeys 方法

fromkeys()方法的演示如下:

請注意,該結(jié)果與 zip() 方法之后的結(jié)果是不一樣的。

seq = ['name', 'age', 'city'] value = ['Lemon', 18, 'cs']

my_dict9 = dict.fromkeys(seq, value)

my_dict9

結(jié)果如下:

{'name': ['Lemon', 18, 'cs'], 'age': ['Lemon', 18, 'cs'], 'city': ['Lemon', 18, 'cs']}

zip()方法

seq = ['name', 'age', 'city'] value = ['Lemon', 18, 'cs']

my_dict10 = dict(zip(seq, value))

my_dict10

結(jié)果如下:

{'name': 'Lemon', 'age': 18, 'city': 'cs'}

setdefault 方法

dict.setdefault(key, default=None)

該方法接收兩個參數(shù),第一個參數(shù)是健的名稱,第二個參數(shù)是默認(rèn)值。

假如字典中不存在給定的鍵,則把默認(rèn)值賦值給對應(yīng)的value,并返回默認(rèn)值;

反之,不修改value,只返回value。

my_dict8 = {'name': 'John', 'age': 25 , 1: [2, 4, 3], 'gender': 'man'} print('字典中存在的key,返回對應(yīng)value:', my_dict8.setdefault('age', 0)) print('字典中不存在的key,返回默認(rèn)值:', my_dict8.setdefault('age1', 0))

結(jié)果如下:

字典中存在的key,返回對應(yīng)value: 25 字典中不存在的key,返回默認(rèn)值: 0 

此外,還可以用 setdefault() 方法統(tǒng)計一個列表里單詞出現(xiàn)的次數(shù):

# 用 setdefault() 方法統(tǒng)計一個列表里單詞出現(xiàn)的次數(shù) strings = ('Lemon', 'kitten', 'Lemon', 'Lemon', 'lemon_zs', 'Lemon', 'Lemon', 'lemon_zs')
counts = {} for kw in strings:
    counts[kw] = counts.setdefault(kw, 0) + 1 counts

結(jié)果如下:

{'Lemon': 5, 'kitten': 1, 'lemon_zs': 2} 

02、字典推導(dǎo)式(dict comprehension)

字典推導(dǎo)式的一般表達(dá)式如下:

{key: value for (key, value) in iterable}

有些用法與列表推導(dǎo)式是類似的,可以參考下面的內(nèi)容:

用字典推導(dǎo)式的方法創(chuàng)建字典:

my_dict01 = {x: x*x for x in range(6)}

my_dict01

結(jié)果如下:

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} 

通過兩個list創(chuàng)建字典:

keys = ['name', 'age', 'city'] values = ['Lemon', 18, 'cs']

my_dict02 = {k:v for (k,v) in zip(keys,values)}

my_dict02

結(jié)果如下:

{'name': 'Lemon', 'age': 18, 'city': 'cs'}

在特定條件下,用字典推導(dǎo)式的方法創(chuàng)建字典:

my_dict03 = {x: x*x for x in range(10) if x%2==0} my_dict03 

結(jié)果如下:

{0: 0, 2: 4, 4: 16, 6: 36, 8: 64} 

03、嵌套型字典

什么是嵌套型的字典

字典是以 key、value 的形式創(chuàng)建的, 而嵌套型的字典有一個特征,就是 key 對應(yīng)的 value 值也可以是一個字典。最簡潔的嵌套型字典如下:

d = {key1 : {key3 : value3}, 
     key2 : {key4 : value4} }

創(chuàng)建一個嵌套型字典

nested_dict01 = {1: {'name':'Lemon', 'age': '18', 'city':'cs'},
                2: {'name':'Lemon_zs', 'age': '18', 'city':'changsha'}}
nested_dict01

結(jié)果如下:

{1: {'name': 'Lemon', 'age': '18', 'city': 'cs'}, 2: {'name': 'Lemon_zs', 'age': '18', 'city': 'changsha'}}

上述的嵌套型字典中,字典第一層的 key 分別是 1 和 2, 而他們對應(yīng)的 value 值又是都是字典, 里面的字典的 key 都是 "name", "age" 和 "city", 但對應(yīng)的 value 不一樣。

從嵌套型字典中獲取元素

從嵌套型字典中獲取元素,跟從 list, 以及數(shù)組中獲取元素時有些類似的。

嵌套型字典 用 [] 進(jìn)行不同層級元素的獲取。

nested_dict01 = {1: {'name':'Lemon', 'age': '18', 'city':'cs'},  2: {'name':'Lemon_zs', 'age': '18', 'city':'changsha'}} print(nested_dict01[1]['name'])
print(nested_dict01[2]['city'])

結(jié)果如下:

Lemon changsha

修改嵌套型字典的元素 (更改、增加或刪除元素)

針對嵌套型字典,同樣是可以更新、增加或刪除元素的.

增加一個空的字典

nested_dict01 = {1: {'name':'Lemon', 'age': '18', 'city':'cs'},
                2: {'name':'Lemon_zs', 'age': '18', 'city':'changsha'}} # 增加一個空的字典 nested_dict01[3] = {}

nested_dict01

結(jié)果如下:

{1: {'name': 'Lemon', 'age': '18', 'city': 'cs'}, 2: {'name': 'Lemon_zs', 'age': '18', 'city': 'changsha'}, 3: {}}

修改或增加新的元素

# 修改元素內(nèi)容 nested_dict01[2]['age'] = '26' # 增加新的元素 nested_dict01[3]['name'] = 'zws'
nested_dict01

結(jié)果如下:

{1: {'name': 'Lemon', 'age': '18', 'city': 'cs'}, 2: {'name': 'Lemon_zs', 'age': '26', 'city': 'changsha'}, 3: {'name': 'zws'}}

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }