Python字典数据类型及基本操作
字典是Python中重要的數(shù)據(jù)類型,字典是由"鍵-值"對組成的集合,"鍵-值"對之間用逗號隔開,包含在一對花括號中。字典中的"值"通過"鍵"來引用。
創(chuàng)建字典
創(chuàng)建字典的格式如下:
dictionary = {key1:value1, key2:value2, ...}創(chuàng)建實例如下:
dict = {} #空字典 dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell')} #多元素字典 dict2 = {'lesson1': 'Python', lesson2': 'Java', 'lesson3': 'Shell')} #注意和dict1不同(lesson首字母小寫),原因是字典中的鍵是區(qū)分大小寫的說明:字典的鍵是區(qū)分大小寫的。
獲取字典的值
訪問字典中的元素有2種方法。第1種是通過key值獲取相應(yīng)的value值,第二種是通過字典函數(shù)get()來獲取。
(1)通過key值獲取相應(yīng)的value值。語法格式為:value = dict[key]。具體實例如下:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> dict1 = {'Lesson1': 'Python'} >>> dict1['Lesson1'] 'Python' >>> dict1['Lesson2'] #不存在對應(yīng)的鍵值,返回KeyError報錯 Traceback (most recent call last):File "<stdin>", line 1, in <module> KeyError: 'Lesson2'(2)通過get()函數(shù)獲取value值,get()函數(shù)使用格式如下:
dict.get(key[,default_value])說明:參數(shù)key表示字典的鍵值,參數(shù)default_value可以作為get()的返回值,默認值為None。如果指定default_value參數(shù)值,表示如果參數(shù)key鍵值在字典key列表中,則返回對應(yīng)的value值,如果不在,則返回預(yù)先設(shè)定的default_value的值。具體實例如下所示:
>>> dict1 = {'Lesson1': 'Python'} >>> dict1.get('Lesson1') 'Python' >>> dict1.get('Lesson2') >>> dict1.get('Lesson2','Perl') 'Perl'添加字典元素
方法一:直接添加方法,使用格式如下:
dict[key] = value如果鍵值key不在字典dict的key列表中,字典dict添加(key:value)的記錄。如果已經(jīng)在key列表中,則修改鍵值key對應(yīng)的value值。
dict['Lesson3'] = 'Perl'舉個例子,假設(shè)字典dict中不存在鍵名為Lesson3的字符串,則直接添加。如果已存在,則刷新值為Perl字符串。實例如下:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> dict1 = {'Lesson1': 'Python'} >>> dict1['Lesson3'] = 'Perl' >>> dict1 {'Lesson3': 'Perl', 'Lesson1': 'Python'} >>> dict1 = {'Lesson3': 'Python'} >>> dict1['Lesson3'] = 'Perl' >>> dict1 {'Lesson3': 'Perl'}方法二:通過調(diào)用setdefault()函數(shù)方法實現(xiàn)。格式如下:
dict.setdefault(key[,default_value])如果索引key在字典key列表中,則返回對應(yīng)的value值,如果不在key列表中,則添加新索引key和value在字典中,并反饋default_value值,默認值 為None。使用實例如下:
>>> dict1 = {'Lesson1': 'Python'} >>> dict1.setdefault('Lesson1') 'Python' >>> dict1.setdefault('Lesson2') >>> dict1 {'Lesson2': None, 'Lesson1': 'Python'} >>> dict1.setdefault('Lesson3','Shell') 'Shell' >>> dict1 {'Lesson3': 'Shell', 'Lesson2': None, 'Lesson1': 'Python'}獲取字典所有keys、Values或者key-valu鍵值對
(1)獲取字典的所有"鍵"-"值"元素。通過調(diào)用字典的items()方法實現(xiàn),返回的是(key,value)元組組成的列表。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.items() [('Lesson3', 'Shell'), ('Lesson2', 'Java'), ('Lesson1', 'Python')](2)獲取字典的中key組成的列表。通過調(diào)用字典的keys()方法實現(xiàn)。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.keys() ['Lesson3', 'Lesson2', 'Lesson1'](3)獲取字典的中value組成的列表。通過調(diào)用字典的values()方法實現(xiàn)。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.values() ['Shell', 'Java', 'Python']判斷指定key是否存在字典
判斷字典中是否存在鍵值為k的元素。通過調(diào)用字典has_key()方法實現(xiàn)。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.has_key('Lesson1') True >>> dict1.has_key('Lesson4') False刪除字典元素。
方法一:通過調(diào)用內(nèi)置函數(shù)del實現(xiàn)。實例如下:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> del dict1['Lesson1'] >>> dict1 {'Lesson3': 'Shell', 'Lesson2': 'Java'}方法二:通過調(diào)用字典的pop()函數(shù)實現(xiàn)。pop()函數(shù)格式如下:
dict.pop(key[,default_value])pop()函數(shù)必須指定參數(shù)索引key才能刪除對應(yīng)的值。如果索引key在字典key列表中,則返回索引key對應(yīng)的value值。如果不存在,則返回預(yù)先設(shè)置的default_value值,如果未設(shè)置,會爬出KeyError異常信息。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.pop('Lesson3') 'Shell' >>> dict1 {'Lesson2': 'Java', 'Lesson1': 'Python'} >>> dict1.pop('Lesson3','Perl') 'Perl'方法三:調(diào)用字典的clear()函數(shù),清除字典的所有內(nèi)容。實例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'} >>> dict1.clear() >>> dict1 {}字典排序
字典的排序可以通過使用sorted()函數(shù)實現(xiàn),實例如下:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> dict = {'2':"Python",'1':"Java",'3':"C++"} >>> sorted(dict.items(),key=lambda d:d[0]) [('1', 'Java'), ('2', 'Python'), ('3', 'C++')] >>> sorted(dict.items(),key=lambda d:d[1]) [('3', 'C++'), ('1', 'Java'), ('2', 'Python')]也可以使用如下方法對值進行排序,先使用zip進行反轉(zhuǎn)
>>> sorted(zip(prices.values(),prices.keys())) [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]說明:如果存在values相同的情況下,則會按照key的大小進行排序。如下:
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 612.78, 'HPQ': 37.20,'FB': 10.75 } >>> sorted(zip(prices.values(),prices.keys())) [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (612.78, 'AAPL'), (612.78, 'IBM')]計算字典最大值和最小值
通過使用zip()將字典鍵和值反轉(zhuǎn),再使用min()和max()函數(shù)計算。
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 } >>> min_price = min(zip(prices.values(),prices.keys())) >>> print(min_price) (10.75, 'FB') >>> max_price = max(zip(prices.values(),prices.keys())) >>> print(max_price) (612.78, 'AAPL')獲取字典相同元素
獲取兩個字典相同的鍵、值或者items。可以通過集合運算的方式獲取。
>>> dic_a = {'x':1,'y':2,'z':3} >>> dic_b = {'w':10,'x':11,'y':2} >>> dic_a.keys() & dic_b.keys() {'x', 'y'} >>> dic_a.keys() - dic_b.keys() {'z'} >>> dic_a.items() & dic_a.items() {('z', 3), ('x', 1), ('y', 2)}這些類型的操作額可用來修改或過濾掉字典中的內(nèi)容。使用字典推導(dǎo)式代碼如下:
>>> dic_c = { key:dic_a[key] for key in dic_a.keys() - {'z','w'}} >>> print(dic_c) {'x': 1, 'y': 2}創(chuàng)建有序字典
可以使用collections模塊中的OrderedDict類,當對字典迭代時,它會嚴格按照元素初始添加的順序進行。
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> from collections import OrderedDict >>> prices = OrderedDict() >>> prices['ACME'] = 45 >>> prices['AAPL'] = 46 >>> prices['IBM'] = 47 >>> for key in prices: ... print(key,prices[key]) ... ('ACME', 45) ('AAPL', 46) ('IBM', 47)從字典中提取子集
從指定的字典中按照鍵或者值進行過濾獲取字典子集。
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 } >>> p1 = {key:value for key, value in prices.items() if value > 20} >>> print(p1) {'HPQ': 37.2, 'AAPL': 612.78, 'ACME': 45.23, 'IBM': 205.55} >>> tech_name = {'ACME', 'AAPL', 'IBM'} >>> p2 = {key:value for key, value in prices.items() if key in tech_name} >>> print(p2) {'AAPL': 612.78, 'IBM': 205.55, 'ACME': 45.23}找到最大或最小的N個元素
使用heapq模塊中的兩個函數(shù)nlargest()和nsmallest()獲取最大和最小的N個元素。
>>> import heapq >>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 } >>> large3_lst = heapq.nlargest(3,zip(prices.values(),prices.keys())) >>> print(large3_lst) [(612.78, 'AAPL'), (205.55, 'IBM'), (45.23, 'ACME')] >>> small3_lst = heapq.nsmallest(3,zip(prices.values(),prices.keys())) >>> print(small3_lst) [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME')] 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Python字典数据类型及基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python多进程编程常用到的方法
- 下一篇: python json dumps与lo