溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python常用數(shù)據(jù)結(jié)構(gòu)是什么

發(fā)布時間:2021-11-01 10:36:37 來源:億速云 閱讀:262 作者:iii 欄目:編程語言

這篇文章主要介紹“Python常用數(shù)據(jù)結(jié)構(gòu)是什么”,在日常操作中,相信很多人在Python常用數(shù)據(jù)結(jié)構(gòu)是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python常用數(shù)據(jù)結(jié)構(gòu)是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

例如,我們要保存一個人的信息,包括姓名、年齡、體重、單位地址、家庭住址、本人手機(jī)號、緊急聯(lián)系人手機(jī)號等信息,你會發(fā)現(xiàn)我們之前學(xué)過的列表、元組和集合都不是最理想的選擇。

person1 = ['王大錘', 
55, 
60, 
'科華北路62號', 
'中同仁路8號', 
'13122334455', 
'13800998877']
person2 = ('王大錘', 55, 60, '科華北路62號', '中同仁路8號', '13122334455', '13800998877')
person3 = {'王大錘', 55, 60, '科華北路62號', '中同仁路8號', '13122334455', '13800998877'}

集合肯定是最不合適的,因?yàn)榧嫌腥ブ靥匦?,如果一個人的年齡和體重相同,那么集合中就會少一項(xiàng)信息;同理,如果這個人的家庭住址和單位地址是相同的,那么集合中又會少一項(xiàng)信息。另一方面,雖然列表和元組可以把一個人的所有信息都保存下來,但是當(dāng)你想要獲取這個人的手機(jī)號時,你得先知道他的手機(jī)號是列表或元組中的第6個還是第7個元素;當(dāng)你想獲取一個人的家庭住址時,你還得知道家庭住址是列表或元組中的第幾項(xiàng)??傊?,在遇到上述的場景時,列表、元組、字典都不是最合適的選擇,我們還需字典(dictionary)類型,這種數(shù)據(jù)類型最適合把相關(guān)聯(lián)的信息組裝到一起,并且可以幫助我們解決程序中為真實(shí)事物建模的問題。

說到字典這個詞,大家一定不陌生,讀小學(xué)的時候每個人基本上都有一本《新華字典》,如下圖所示。

Python常用數(shù)據(jù)結(jié)構(gòu)是什么

Python程序中的字典跟現(xiàn)實(shí)生活中的字典很像,它以鍵值對(鍵和值的組合)的方式把數(shù)據(jù)組織到一起,我們可以通過鍵找到與之對應(yīng)的值并進(jìn)行操作。就像《新華字典》中,每個字(鍵)都有與它對應(yīng)的解釋(值)一樣,每個字和它的解釋合在一起就是字典中的一個條目,而字典中通常包含了很多個這樣的條目。

創(chuàng)建和使用字典

在Python中創(chuàng)建字典可以使用{}字面量語法,這一點(diǎn)跟上一節(jié)課講的集合是一樣的。但是字典的{}中的元素是以鍵值對的形式存在的,每個元素由:分隔的兩個值構(gòu)成,:前面是鍵,:后面是值,代碼如下所示。

xinhua = {
   '麓': '山腳下', '路': '道,往來通行的地方;方面,地區(qū):南~貨,外~貨;種類:他倆是一~人',
   '蕗': '甘草的別名', '潞': '潞水,水名,即今山西省的濁漳河;潞江,水名,即云南省的怒江'
}
print(xinhua)
person = {
   'name': '王大錘', 'age': 55, 'weight': 60, 'office': '科華北路62號',
   'home': '中同仁路8號', 'tel': '13122334455', 'econtact': '13800998877'
}
print(person)

通過上面的代碼,相信大家已經(jīng)看出來了,用字典來保存一個人的信息遠(yuǎn)遠(yuǎn)優(yōu)于使用列表或元組,因?yàn)槲覀兛梢杂?前面的鍵來表示條目的含義,而:后面就是這個條目所對應(yīng)的值。

當(dāng)然,如果愿意,我們也可以使用內(nèi)置函數(shù)dict或者是字典的生成式語法來創(chuàng)建字典,代碼如下所示。

# dict函數(shù)(構(gòu)造器)中的每一組參數(shù)就是字典中的一組鍵值對
person = dict(name='王大錘', age=55, weight=60, home='中同仁路8號')
print(person)    # {'name': '王大錘', 'age': 55, 'weight': 60, 'home': '中同仁路8號'}

# 可以通過Python內(nèi)置函數(shù)zip壓縮兩個序列并創(chuàng)建字典
items1 = dict(zip('ABCDE', '12345'))
print(items1)    # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'}
items2 = dict(zip('ABCDE', range(1, 10)))
print(items2)    # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}

# 用字典生成式語法創(chuàng)建字典
items3 = {x: x ** 3 for x in range(1, 6)}
print(items3)     # {1: 1, 2: 8, 3: 27, 4: 64, 5: 125}

想知道字典中一共有多少組鍵值對,仍然是使用len函數(shù);如果想對字典進(jìn)行遍歷,可以用for循環(huán),但是需要注意,for循環(huán)只是對字典的鍵進(jìn)行了遍歷,不過沒關(guān)系,在講完字典的運(yùn)算后,我們可以通過字典的鍵獲取到和這個鍵對應(yīng)的值。

person = {'name': 
'王大錘', 
'age': 
55, 
'weight': 
60, 
'office': 
'科華北路62號'}
print(len(person))    # 4
for key in person:
   print(key)

字典的運(yùn)算

對于字典類型來說,成員運(yùn)算和索引運(yùn)算肯定是最為重要的,前者可以判定指定的鍵在不在字典中,后者可以通過鍵獲取對應(yīng)的值或者向字典中加入新的鍵值對。值得注意的是,字典的索引不同于列表的索引,列表中的元素因?yàn)橛袑儆谧约河行蛱?,所以列表的索引是一個整數(shù);字典中因?yàn)楸4娴氖擎I值對,所以字典的索引是鍵值對中的鍵,通過索引操作可以修改原來的值或者向字典中存入新的鍵值對。需要特別提醒大家注意的是,字典中的鍵必須是不可變類型,例如整數(shù)(int)、浮點(diǎn)數(shù)(float)、字符串(str)、元組(tuple)等類型的值;顯然,列表(list)和集合(set)是不能作為字典中的鍵的,當(dāng)然字典類型本身也不能再作為字典中的鍵,因?yàn)樽值湟彩强勺冾愋停亲值淇梢宰鳛樽值渲械闹?。關(guān)于可變類型不能作為字典中的鍵的原因,我們在后面的課程中再為大家詳細(xì)說明。這里,我們先看看下面的代碼,了解一下字典的成員運(yùn)算和索引運(yùn)算。

person = {'name': 
'王大錘', 
'age': 
55, 
'weight': 
60, 
'office': 
'科華北路62號'}
# 檢查name和tel兩個鍵在不在person字典中
print('name' in person, 'tel' in person)    # True False
# 通過age修將person字典中對應(yīng)的值修改為25
if 'age' in person:
   person['age'] = 25
# 通過索引操作向person字典中存入新的鍵值對
person['tel'] = '13122334455'
person['signature'] = '你的男朋友是一個蓋世垃圾,他會踏著五彩祥云去贏取你的閨蜜'
print('name' in person, 'tel' in person)    # True True
# 檢查person字典中鍵值對的數(shù)量
print(len(person))    # 6
# 對字典的鍵進(jìn)行循環(huán)并通索引運(yùn)算獲取鍵對應(yīng)的值
for key in person:
   print(f'{key}: {person[key]}')

需要注意,在通過索引運(yùn)算獲取字典中的值時,如指定的鍵沒有在字典中,將會引發(fā)KeyError異常。

字典的方法

字典類型的方法基本上都跟字典的鍵值對操作相關(guān),可以通過下面的例子來了解這些方法的使用。例如,我們要用一個字典來保存學(xué)生的信息,我們可以使用學(xué)生的學(xué)號作為字典中的鍵,通過學(xué)號做索引運(yùn)算就可以得到對應(yīng)的學(xué)生;我們可以把字典中鍵對應(yīng)的值也做成一個字典,這樣就可以用多組鍵值對分別存儲學(xué)生的姓名、性別、年齡、籍貫等信息,代碼如下所示。

# 字典中的值又是一個字典(嵌套的字典)
students = {
   1001: {'name': '狄仁杰', 'sex': True, 'age': 22, 'place': '山西大同'},
   1002: {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'},
   1003: {'name': '武則天', 'sex': False, 'age': 20, 'place': '四川廣元'}
}

# 使用get方法通過鍵獲取對應(yīng)的值,如果取不到不會引發(fā)KeyError異常而是返回None或設(shè)定的默認(rèn)值
print(students.get(1002))    # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(students.get(1005))    # None
print(students.get(1005, {'name': '無名氏'}))    # {'name': '無名氏'}

# 獲取字典中所有的鍵
print(students.keys())      # dict_keys([1001, 1002, 1003])
# 獲取字典中所有的值
print(students.values())    # dict_values([{...}, {...}, {...}])
# 獲取字典中所有的鍵值對
print(students.items())     # dict_items([(1001, {...}), (1002, {....}), (1003, {...})])
# 對字典中所有的鍵值對進(jìn)行循環(huán)遍歷
for key, value in students.items():
   print(key, '--->', value)

# 使用pop方法通過鍵刪除對應(yīng)的鍵值對并返回該值
stu1 = students.pop(1002)
print(stu1)             # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(len(students))    # 2
# stu2 = students.pop(1005)    # KeyError: 1005
stu2 = students.pop(1005, {})
print(stu2)             # {}

# 使用popitem方法刪除字典中最后一組鍵值對并返回對應(yīng)的二元組
# 如果字典中沒有元素,調(diào)用該方法將引發(fā)KeyError異常
key, value = students.popitem()
print(key, value)    # 1003 {'name': '武則天', 'sex': False, 'age': 20, 'place': '四川廣元'}

# setdefault可以更新字典中的鍵對應(yīng)的值或向字典中存入新的鍵值對
# setdefault方法的第一個參數(shù)是鍵,第二個參數(shù)是鍵對應(yīng)的值
# 如果這個鍵在字典中存在,更新這個鍵之后會返回原來與這個鍵對應(yīng)的值
# 如果這個鍵在字典中不存在,方法將返回第二個參數(shù)的值,默認(rèn)為None
result = students.setdefault(1005, {'name': '方啟鶴', 'sex': True})
print(result)        # {'name': '方啟鶴', 'sex': True}
print(students)      # {1001: {...}, 1005: {...}}

# 使用update更新字典元素,相同的鍵會用新值覆蓋掉舊值,不同的鍵會添加到字典中
others = {
   1005: {'name': '喬峰', 'sex': True, 'age': 32, 'place': '北京大興'},
   1010: {'name': '王語嫣', 'sex': False, 'age': 19},
   1008: {'name': '鐘靈', 'sex': False}
}
students.update(others)
print(students)      # {1001: {...}, 1005: {...}, 1010: {...}, 1008: {...}}

跟列表一樣,從字典中刪除元素也可以使用del關(guān)鍵字,在刪除元素的時候如果指定的鍵索引不到對應(yīng)的值,一樣會引發(fā)KeyError異常,具體的做法如下所示。

person = {'name': 
'王大錘', 
'age': 
25, 
'sex': True}
del person['age']
print(person)    # {'name': '王大錘', 'sex': True}

字典的應(yīng)用

我們通過幾個簡單的例子來講解字典的應(yīng)用。

例子1:輸入一段話,統(tǒng)計(jì)每個英文字母出現(xiàn)的次數(shù)。

sentence = input('請輸入一段話: ')
counter = {}
for ch in sentence:
   if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':
       counter[ch] = counter.get(ch, 0) + 1
for key, value in counter.items():
   print(f'字母{key}出現(xiàn)了{(lán)value}次.')

例子2:在一個字典中保存了股票的代碼和價(jià)格,找出股價(jià)大于100元的股票并創(chuàng)建一個新的字典。

說明:可以用字典的生成式語法來創(chuàng)建這個新字典。

stocks = {
   'AAPL': 191.88,
   'GOOG': 1186.96,
   'IBM': 149.24,
   'ORCL': 48.44,
   'ACN': 166.89,
   'FB': 208.09,
   'SYMC': 21.29
}
stocks2 = {key: value for key, value in stocks.items() if value > 100}
print(stocks2)

到此,關(guān)于“Python常用數(shù)據(jù)結(jié)構(gòu)是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI