您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python常用數據結構是什么”,在日常操作中,相信很多人在Python常用數據結構是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python常用數據結構是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
例如,我們要保存一個人的信息,包括姓名、年齡、體重、單位地址、家庭住址、本人手機號、緊急聯系人手機號等信息,你會發現我們之前學過的列表、元組和集合都不是最理想的選擇。
person1 = ['王大錘',
55,
60,
'科華北路62號',
'中同仁路8號',
'13122334455',
'13800998877']
person2 = ('王大錘',
55,
60,
'科華北路62號',
'中同仁路8號',
'13122334455',
'13800998877')
person3 = {'王大錘',
55,
60,
'科華北路62號',
'中同仁路8號',
'13122334455',
'13800998877'}
集合肯定是最不合適的,因為集合有去重特性,如果一個人的年齡和體重相同,那么集合中就會少一項信息;同理,如果這個人的家庭住址和單位地址是相同的,那么集合中又會少一項信息。另一方面,雖然列表和元組可以把一個人的所有信息都保存下來,但是當你想要獲取這個人的手機號時,你得先知道他的手機號是列表或元組中的第6個還是第7個元素;當你想獲取一個人的家庭住址時,你還得知道家庭住址是列表或元組中的第幾項。總之,在遇到上述的場景時,列表、元組、字典都不是最合適的選擇,我們還需字典(dictionary)類型,這種數據類型最適合把相關聯的信息組裝到一起,并且可以幫助我們解決程序中為真實事物建模的問題。
說到字典這個詞,大家一定不陌生,讀小學的時候每個人基本上都有一本《新華字典》,如下圖所示。
Python程序中的字典跟現實生活中的字典很像,它以鍵值對(鍵和值的組合)的方式把數據組織到一起,我們可以通過鍵找到與之對應的值并進行操作。就像《新華字典》中,每個字(鍵)都有與它對應的解釋(值)一樣,每個字和它的解釋合在一起就是字典中的一個條目,而字典中通常包含了很多個這樣的條目。
在Python中創建字典可以使用{}字面量語法,這一點跟上一節課講的集合是一樣的。但是字典的{}中的元素是以鍵值對的形式存在的,每個元素由:分隔的兩個值構成,:前面是鍵,:后面是值,代碼如下所示。
xinhua = {
'麓':
'山腳下',
'路':
'道,往來通行的地方;方面,地區:南~貨,外~貨;種類:他倆是一~人',
'蕗':
'甘草的別名',
'潞':
'潞水,水名,即今山西省的濁漳河;潞江,水名,即云南省的怒江'
}
print(xinhua)
person = {
'name':
'王大錘',
'age': 55,
'weight': 60,
'office':
'科華北路62號',
'home':
'中同仁路8號',
'tel':
'13122334455',
'econtact':
'13800998877'
}
print(person)
通過上面的代碼,相信大家已經看出來了,用字典來保存一個人的信息遠遠優于使用列表或元組,因為我們可以用:前面的鍵來表示條目的含義,而:后面就是這個條目所對應的值。
當然,如果愿意,我們也可以使用內置函數dict或者是字典的生成式語法來創建字典,代碼如下所示。
# dict函數(構造器)中的每一組參數就是字典中的一組鍵值對
person = dict(name='王大錘', age=55, weight=60, home='中同仁路8號')
print(person) # {'name':
'王大錘',
'age':
55,
'weight':
60,
'home':
'中同仁路8號'}
# 可以通過Python內置函數zip壓縮兩個序列并創建字典
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}
# 用字典生成式語法創建字典
items3 = {x: x **
3 for x in
range(1,
6)}
print(items3) # {1:
1,
2:
8,
3:
27,
4:
64,
5:
125}
想知道字典中一共有多少組鍵值對,仍然是使用len函數;如果想對字典進行遍歷,可以用for循環,但是需要注意,for循環只是對字典的鍵進行了遍歷,不過沒關系,在講完字典的運算后,我們可以通過字典的鍵獲取到和這個鍵對應的值。
person = {'name':
'王大錘',
'age':
55,
'weight':
60,
'office':
'科華北路62號'}
print(len(person)) #
4
for key in person:
print(key)
對于字典類型來說,成員運算和索引運算肯定是最為重要的,前者可以判定指定的鍵在不在字典中,后者可以通過鍵獲取對應的值或者向字典中加入新的鍵值對。值得注意的是,字典的索引不同于列表的索引,列表中的元素因為有屬于自己有序號,所以列表的索引是一個整數;字典中因為保存的是鍵值對,所以字典的索引是鍵值對中的鍵,通過索引操作可以修改原來的值或者向字典中存入新的鍵值對。需要特別提醒大家注意的是,字典中的鍵必須是不可變類型,例如整數(int)、浮點數(float)、字符串(str)、元組(tuple)等類型的值;顯然,列表(list)和集合(set)是不能作為字典中的鍵的,當然字典類型本身也不能再作為字典中的鍵,因為字典也是可變類型,但是字典可以作為字典中的值。關于可變類型不能作為字典中的鍵的原因,我們在后面的課程中再為大家詳細說明。這里,我們先看看下面的代碼,了解一下字典的成員運算和索引運算。
person = {'name':
'王大錘',
'age':
55,
'weight':
60,
'office':
'科華北路62號'}
# 檢查name和tel兩個鍵在不在person字典中
print('name' in person,
'tel' in person) # True False
# 通過age修將person字典中對應的值修改為25
if
'age' in person:
person['age'] =
25
# 通過索引操作向person字典中存入新的鍵值對
person['tel'] =
'13122334455'
person['signature'] =
'你的男朋友是一個蓋世垃圾,他會踏著五彩祥云去贏取你的閨蜜'
print('name' in person,
'tel' in person) # True True
# 檢查person字典中鍵值對的數量
print(len(person)) #
6
# 對字典的鍵進行循環并通索引運算獲取鍵對應的值
for key in person:
print(f'{key}: {person[key]}')
需要注意,在通過索引運算獲取字典中的值時,如指定的鍵沒有在字典中,將會引發KeyError異常。
字典類型的方法基本上都跟字典的鍵值對操作相關,可以通過下面的例子來了解這些方法的使用。例如,我們要用一個字典來保存學生的信息,我們可以使用學生的學號作為字典中的鍵,通過學號做索引運算就可以得到對應的學生;我們可以把字典中鍵對應的值也做成一個字典,這樣就可以用多組鍵值對分別存儲學生的姓名、性別、年齡、籍貫等信息,代碼如下所示。
# 字典中的值又是一個字典(嵌套的字典)
students = {
1001: {'name':
'狄仁杰',
'sex': True,
'age':
22,
'place':
'山西大同'},
1002: {'name':
'白元芳',
'sex': True,
'age':
23,
'place':
'河北保定'},
1003: {'name':
'武則天',
'sex': False,
'age':
20,
'place':
'四川廣元'}
}
# 使用get方法通過鍵獲取對應的值,如果取不到不會引發KeyError異常而是返回None或設定的默認值
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, {...})])
# 對字典中所有的鍵值對進行循環遍歷
for key, value in students.items():
print(key,
'--->', value)
# 使用pop方法通過鍵刪除對應的鍵值對并返回該值
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方法刪除字典中最后一組鍵值對并返回對應的二元組
# 如果字典中沒有元素,調用該方法將引發KeyError異常
key, value = students.popitem()
print(key, value) #
1003 {'name':
'武則天',
'sex': False,
'age':
20,
'place':
'四川廣元'}
# setdefault可以更新字典中的鍵對應的值或向字典中存入新的鍵值對
# setdefault方法的第一個參數是鍵,第二個參數是鍵對應的值
# 如果這個鍵在字典中存在,更新這個鍵之后會返回原來與這個鍵對應的值
# 如果這個鍵在字典中不存在,方法將返回第二個參數的值,默認為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關鍵字,在刪除元素的時候如果指定的鍵索引不到對應的值,一樣會引發KeyError異常,具體的做法如下所示。
person = {'name':
'王大錘',
'age':
25,
'sex': True}
del person['age']
print(person) # {'name':
'王大錘',
'sex': True}
我們通過幾個簡單的例子來講解字典的應用。
例子1:輸入一段話,統計每個英文字母出現的次數。
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}出現了{value}次.')
例子2:在一個字典中保存了股票的代碼和價格,找出股價大于100元的股票并創建一個新的字典。
說明:可以用字典的生成式語法來創建這個新字典。
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)
到此,關于“Python常用數據結構是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。