Python字典中的使用方法

今天就跟大家聊聊有關(guān)Python字典中的使用方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司主營(yíng)開(kāi)陽(yáng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,開(kāi)陽(yáng)h5小程序開(kāi)發(fā)搭建,開(kāi)陽(yáng)網(wǎng)站營(yíng)銷推廣歡迎開(kāi)陽(yáng)等地區(qū)企業(yè)咨詢

介紹

字典(dict)是Python中內(nèi)置的一個(gè)數(shù)據(jù)結(jié)構(gòu),由多個(gè)鍵值對(duì)組成,鍵(key)和值(value)用冒號(hào)分隔,每個(gè)鍵值對(duì)之間用逗號(hào)(,)分隔,整個(gè)字典包括在大括號(hào)中({}),鍵必須是唯一的,值可以取任何類型,但是鍵必須是不可變類型,如字符串,數(shù)字或元組。

 

底層使用了hash表來(lái)關(guān)聯(lián)key和value,dict是無(wú)序的。特點(diǎn)包括:

● 查找和插入的速度極快,不會(huì)隨著key的增加而變慢;

● 需要占用的內(nèi)存較多

所以,dict是一種以空間換取時(shí)間的數(shù)據(jù)結(jié)構(gòu),應(yīng)用于需要快速查找的場(chǎng)景。

操作:常用方法

get()

返回指定鍵的值,如果key不存在,則返回默認(rèn)值(默認(rèn)為None),而不會(huì)報(bào)錯(cuò),語(yǔ)法為dict.get(key)。

dict_1['age'] = 24
In [7]: print(dict_1.get('age'))
24
In [11]: print(dict_1.get('nama'))
None
In [12]: print(dict_1['nama'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-12-ef61a380920e> in <module>
----> 1 print(dict_1['nama'])
KeyError: 'nama'

key in dict

使用in操作符來(lái)判斷鍵是否存在于字典中,存在則返回True,否則返回False,語(yǔ)法為:key in dict。

In [15]: dict_1
Out[15]: {'name': None, 'age': 24, 'sex': None}
In [16]: print('name' in dict_1)
True
In [17]: print('nama' in dict_1)
False

在python 2中該功能使用has_key()方法實(shí)現(xiàn)。

items()

以列表形式返回可遍歷的(鍵, 值)元組數(shù)組,語(yǔ)法為dict.items()。

In [18]: dict_1
Out[18]: {'name': None, 'age': 24, 'sex': None}
In [19]: print(dict_1.items())
dict_items([('name', None), ('age', 24), ('sex', None)])
In [20]: for key, value in dict_1.items():
    ...:     print(key, value)
    ...:
name None
age 24
sex None

keys()

以列表返回一個(gè)字典的所有鍵:dict.keys()

In [21]: dict_1
Out[21]: {'name': None, 'age': 24, 'sex': None}
In [22]: print(dict_1.keys())
dict_keys(['name', 'age', 'sex'])

values()

以列表形式返回字典中的所有值:dict.values()

In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [28]: print(dict_1.values())
dict_values([None, 24, None, 'Tony'])
setdefault()
和get()類似,用戶獲得與給頂尖相關(guān)聯(lián)的值,不同的是,該方法如果鍵不存在時(shí)會(huì)添加鍵并將值設(shè)為默認(rèn)值,語(yǔ)法為:dict.setdefault(key, default=None)。
In [23]: dict_1
Out[23]: {'name': None, 'age': 24, 'sex': None}
In [24]: print(dict_1.setdefault('name'))
None
In [25]: print(dict_1.setdefault('name', 'Tony'))
None
In [26]: print(dict_1.setdefault('sub_name', 'Tony'))
Tony
In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}

update()

語(yǔ)法為:dict_1.update(dict_2),用于把dict_2的鍵值對(duì)更新到dict_1中,如果有相同的鍵會(huì)被覆蓋。

In [31]: dict_1
Out[31]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [32]: dict_2
Out[32]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}
In [33]: dict_1.update(dict_2)
In [34]: dict_1
Out[34]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}

clear()

刪除字典中的所有項(xiàng),dict.clear(),舉個(gè)例子:

In [1]: dict_1 = dict(name="Tony", age=24)
In [2]: dict_2 = dict_1
In [3]: print(dict_2)
{'name': 'Tony', 'age': 24}
In [4]: dict_2.clear()
In [5]: dict_2
Out[5]: {}
In [6]: dict_1
Out[6]: {}

copy()

淺拷貝原始字典,返回一個(gè)具有相同鍵值對(duì)的新字典,dict.copy(),舉個(gè)例子:

In [1]: dict_1 = dict(name='Tony', info=['boy', 24])
In [2]: dict_3 = dict_1.copy()
In [3]: dict_3['name'] = "Ring"
In [4]: dict_3['info'].remove('boy')
In [5]: dict_3
Out[5]: {'name': 'Ring', 'info': [24]}
In [6]: dict_1
Out[6]: {'name': 'Tony', 'info': [24]}

fromkeys()

創(chuàng)建一個(gè)新字典,dict.fromkeys(seq[, value]),以序列seq中的元素做字典的鍵,value為字典所有鍵對(duì)應(yīng)的初始值,其中value為可選參數(shù), 默認(rèn)為None。適用于數(shù)據(jù)初始化,舉個(gè)例子:

In [1]: info = ['name', 'age', 'sex']
In [2]: dict_1 = dict.fromkeys(info)
In [3]: dict_1
Out[3]: {'name': None, 'age': None, 'sex': None}

常見(jiàn)操作

合并字典

有四種方式:

常規(guī)處理

In [15]: dict_1
Out[15]: {'Tony': 24}
In [16]: dict_2
Out[16]: {'ben': 18}
In [17]: dict3 = dict()
In [18]: for key, value in dict_1.items():
    ...:     dict_3[key] = value
    ...:
In [19]: for key, value in dict_2.items():
    ...:     dict_3[key] = value
    ...:
In [20]: dict_3
Out[20]: {'Tony': 24, 'ben': 18}

update()

In [9]: dict_1
Out[9]: {'Tony': 24}
In [10]: dict_2
Out[10]: {'ben': 18}
In [12]: dict_3 = dict_1.copy()
In [13]: dict_3.update(dict_2)
In [14]: dict_3
Out[14]: {'Tony': 24, 'ben': 18}

借助字典的dict(d1, **d2)方法

In [33]: dict_1
Out[33]: {'Tony': 24}
In [34]: dict_2
Out[34]: {'ben': 18}
In [35]: dict_3 = dict(dict_1, **dict_2)
In [36]: dict_3
Out[36]: {'Tony': 24, 'ben': 18}

進(jìn)階

字典推導(dǎo)式

和列表推導(dǎo)式類似,優(yōu)點(diǎn)是底層用C實(shí)現(xiàn),會(huì)快很多,推薦使用。

對(duì)換字典的鍵值

使用字典推導(dǎo)式可以輕松對(duì)換一個(gè)字典的鍵值:

In [42]: dict_4
Out[42]: {24: 'Tony', 18: 'ben'}
In [43]: dict_3
Out[43]: {'Tony': 24, 'ben': 18}
In [44]: dict_4 = {k:v for v, k in dict_3.items()}
In [45]: dict_4
Out[45]: {24: 'Tony', 18: 'ben'}

從字典中提取子集

想創(chuàng)建一個(gè)字典,其本身是另一個(gè)字典的子集。

舉個(gè)例子:

In [88]: a = {'Ben': 18, 'Jack': 12, 'Ring': 23, 'Tony': 24}
In [89]: b = {k:v for k, v in a.items() if v > 18}
In [90]: b
Out[90]: {'Ring': 23, 'Tony': 24}

生成有序字典

在Python3.6之前的字典是無(wú)序的,但是有時(shí)候我們需要保持字典的有序性,orderDict可以在dict的基礎(chǔ)上實(shí)現(xiàn)字典的有序性,這里的有序指的是按照字典key插入的順序來(lái)排列,這樣就實(shí)現(xiàn)了一個(gè)先進(jìn)先出的dict,當(dāng)容量超出限制時(shí),先刪除最早添加的key。

舉例:

In [49]: from collections import OrderedDict
In [50]: ordered_dict = OrderedDict([('a', 2), ('b', 4), ('c', 5)])
In [51]: for key, value in ordered_dict.items():
    ...:     print(key, value)
    ...:
a 2
b 4
c 5

可以看到OrderedDict是按照字典創(chuàng)建時(shí)的插入順序來(lái)排序。

原理:OrderedDict內(nèi)部維護(hù)了一個(gè)雙向鏈表,它會(huì)根據(jù)元素加入的順序來(lái)排列鍵的位置,這也就導(dǎo)致OrderedDict的大小是普通字典的2倍多。

合并列表中key相同的字典

也就是生成所謂的一鍵多值字典,需要將對(duì)應(yīng)的多個(gè)值保存在其它容器比如列表或集合,取決于多值是否需要保證唯一性。

舉個(gè)例子:

In [64]: from collections import defaultdict
In [65]: a = [{'a': 1}, {'b': 3}, {'c': 4}, {'a':5}, {'b':2}, {'b': 4}]
In [66]: b = defaultdict(list)
In [67]: [b[k].append(v) for item in a for k, v in item.items()]
Out[67]: [None, None, None, None, None, None]
In [68]: b
Out[68]: defaultdict(list, {'a': [1, 5], 'b': [3, 2, 4], 'c': [4]})
In [69]: b['a']
Out[69]: [1, 5]

尋找兩個(gè)字典的異同

場(chǎng)景:尋找兩個(gè)字典中的異同,包括相同的鍵或者相同的值。

分析:字典是一系列鍵值之間的映射集合,有以下特點(diǎn):

keys()會(huì)返回字典中的所有鍵,并且字典的鍵是支持集合操作的,所以利用集合的交叉并補(bǔ)即可對(duì)字典的鍵進(jìn)行處理;

items()返回(key, value)組成的對(duì)象,支持集合操作;

values()并不支持集合操作,因?yàn)椴⒉荒鼙WC所有的值是唯一的,但是如果必須要判斷操作,可以先將值轉(zhuǎn)化為集合來(lái)實(shí)現(xiàn)。

舉例:

In [78]: a = {'a':1, 'b':2, 'c':3}
In [79]: b = {'b':3, 'c':3, 'd':4}
In [80]: a.keys() & b.keys()
Out[80]: {'b', 'c'}
In [81]: a.keys() - b.keys()
Out[81]: {'a'}
In [82]: a.items() & b.items()
Out[82]: {('c', 3)}

再舉一個(gè)例子,在創(chuàng)建一個(gè)字典時(shí),期望可以去除某些鍵:

In [85]: a
Out[85]: {'a': 1, 'b': 2, 'c': 3}
In [86]: c = {k: a[key] for k in a.keys() - {'b'}}
In [87]: c
Out[87]: {'a': 3, 'c': 3}

看完上述內(nèi)容,你們對(duì)Python字典中的使用方法有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

分享文章:Python字典中的使用方法
分享地址:http://bm7419.com/article32/igocsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄App開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、搜索引擎優(yōu)化、Google網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司