日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python字典中你必须知道的用法

發(fā)布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python字典中你必须知道的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

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

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

  • 查找和插入的速度極快,不會隨著key的增加而變慢;

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

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

操作:常用方法

get()

返回指定鍵的值,如果key不存在,則返回默認(rèn)值(默認(rèn)為None),而不會報錯,語法為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'

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

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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

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

以列表形式返回可遍歷的(鍵, 值)元組數(shù)組,語法為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

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

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' In [21]: dict_1 Out[21]: {'name': None, 'age': 24, 'sex': None} In [22]: print(dict_1.keys()) dict_keys(['name', 'age', 'sex'])

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

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

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

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': ''}

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

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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]: {}

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

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_3Out[5]: {'name': 'Ring', 'info': [24]}In [6]: dict_1Out[6]: {'name': 'Tony', 'info': [24]}

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

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}

合并字典常見操作

有四種方式:

常規(guī)處理

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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}

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

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}

字典推導(dǎo)式進階

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

對換字典的鍵值

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

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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)建一個字典,其本身是另一個字典的子集。

從字典中提取子集

舉個例子:

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之前的字典是無序的,但是有時候我們需要保持字典的有序性,orderDict可以在dict的基礎(chǔ)上實現(xiàn)字典的有序性,這里的有序指的是按照字典key插入的順序來排列,這樣就實現(xiàn)了一個先進先出的dict,當(dāng)容量超出限制時,先刪除最早添加的key。

生成有序字典

舉例:

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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內(nèi)部維護了一個雙向鏈表,它會根據(jù)元素加入的順序來排列鍵的位置,這也就導(dǎo)致OrderedDict的大小是普通字典的2倍多。可以看到OrderedDict是按照字典創(chuàng)建時的插入順序來排序。

合并列表中key相同的字典

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

舉個例子:

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]

場景:尋找兩個字典中的異同,包括相同的鍵或者相同的值。

尋找兩個字典的異同

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

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

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

values()并不支持集合操作,因為并不能保證所有的值是唯一的,但是如果必須要判斷操作,可以先將值轉(zhuǎn)化為集合來實現(xiàn)。

舉例:

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' 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)}  

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

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}

總結(jié)

以上是生活随笔為你收集整理的Python字典中你必须知道的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。