
3、散列類(lèi)型.png
一、集合
Python中的集合(Set)是一個(gè)無(wú)序的、不包含重復(fù)元素的數(shù)據(jù)結(jié)構(gòu)。集合的基本用途包括成員關(guān)系測(cè)試、移除重復(fù)元素和數(shù)學(xué)上的集合操作(如并集、交集、差集和對(duì)稱(chēng)差集)。集合使用大括號(hào) {} 表示,但需要注意的是,空集合不能使用 {} 表示(因?yàn)檫@會(huì)與空字典混淆),而應(yīng)該使用 set() 來(lái)創(chuàng)建。
1、集合的創(chuàng)建
使用大括號(hào){}(但注意不能用來(lái)創(chuàng)建空集合):
set1 = {1, 2, 3, 4}
使用set()函數(shù):
li1 = [1, 2, 3, 4]
set1 = set([1, 2, 3, 4]) # 從列表創(chuàng)建集合
set2 = set() # 創(chuàng)建空集合
print(set1) # ==> {1, 2, 3, 4}
print(set2) # ==> set()
print(dir(set1))
2、集合的特性
1、唯一性 (可以幫我們?nèi)ブ兀?/h6>
2、確定性,集合中的元素必須是不可變類(lèi)型(如整數(shù)、浮點(diǎn)數(shù)、字符串、元組等),不能是列表、字典或其他集合。
3、無(wú)序性,因此不支持索引和切片操作。
3、update() 方法
是集合(set)的一個(gè)非常有用的方法,它用于向集合中添加元素。如果添加的元素已存在于集合中,則該元素不會(huì)被重復(fù)添加。update() 方法可以接受另一個(gè)集合作為參數(shù),并將該集合中的所有元素添加到當(dāng)前集合中。它也可以接受任何可迭代對(duì)象(如列表、元組等),并將可迭代對(duì)象中的元素添加到集合中。
使用示例:
1. 向集合中添加單個(gè)元素(通常使用 add() 方法)
盡管 update() 方法通常用于添加多個(gè)元素,但了解 add() 方法也很有用,因?yàn)樗糜谙蚣现刑砑訂蝹€(gè)元素。
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 輸出: {1, 2, 3, 4}
2. 使用 update() 方法添加多個(gè)元素
my_set = {1, 2, 3}
my_set.update([4, 5, 6])
print(my_set) # 輸出: {1, 2, 3, 4, 5, 6}
# 使用另一個(gè)集合
other_set = {7, 8}
my_set.update(other_set)
print(my_set) # 輸出: {1, 2, 3, 4, 5, 6, 7, 8}
3. 使用 update() 方法添加可迭代對(duì)象中的元素
my_set = {1, 2, 3}
my_set.update(range(4, 7)) # 使用range對(duì)象
print(my_set) # 輸出: {1, 2, 3, 4, 5, 6}
# 使用字符串(將字符串中的每個(gè)字符視為一個(gè)元素)
my_set.update("abc")
print(my_set) # 輸出: {1, 2, 3, 4, 5, 6, 'a', 'b', 'c'}
注意事項(xiàng):
● 集合中的元素必須是不可變類(lèi)型(如整數(shù)、浮點(diǎn)數(shù)、字符串、元組等),因此不能直接向集合中添加列表或字典等可變類(lèi)型作為元素,但可以將它們的元素作為單個(gè)元素添加到集合中。
● 使用 update() 方法時(shí),如果傳入的參數(shù)是可迭代對(duì)象(如列表、元組、字符串、集合等),則其元素會(huì)被逐一添加到集合中,但重復(fù)的元素會(huì)被忽略。
二、字典
在Python中,字典(Dictionary)是一種可變?nèi)萜髂P?,且可存?chǔ)任意類(lèi)型對(duì)象,如字符串、數(shù)字、元組等其他容器模型。
字典的每個(gè)元素都是一個(gè)鍵值對(duì),鍵和值之間用冒號(hào)(:)分隔,而鍵值對(duì)之間用逗號(hào)(,)分隔。整個(gè)字典被包含在花括號(hào)({})中。
字典的鍵必須是不可變的,這意味著你可以使用字符串、數(shù)字或元組作為鍵,但不能使用列表或字典作為鍵。字典的值可以是任何數(shù)據(jù)類(lèi)型,包括列表、字典或其他復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
1.創(chuàng)建字典:
# 使用花括號(hào)創(chuàng)建字典
dict01 = {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用dict()函數(shù)創(chuàng)建字典
dict02 = dict(name='John', age=30, city='New York')
# 使用字典推導(dǎo)式創(chuàng)建字典 (字典推導(dǎo)式允許通過(guò)一個(gè)表達(dá)式創(chuàng)建一個(gè)新字典,該表達(dá)式定義了鍵值對(duì)的集合。)
dict03 = {key: value for (key, value) in [('name', 'John'), ('age', 30), ('city', 'New York')]}
print(dict01,dict02,dict03) # ==> {'name': 'John', 'age': 30, 'city': 'New York'}
# 修改和添加:
dict04 = {'a': 5}
dict04['a'] = 2 # 有這個(gè)鍵就修改,沒(méi)有就添加
dict04['b'] = 3
print(dict04) # ==> {'a': 2, 'b': 3}
2.增
setdefault()方法允許你為一個(gè)字典中的鍵設(shè)置默認(rèn)值。如果鍵已經(jīng)存在于字典中,setdefault()將返回該鍵對(duì)應(yīng)的值,而不會(huì)改變?nèi)魏蝺?nèi)容。如果鍵不存在,setdefault()將添加該鍵并將第二個(gè)參數(shù)作為它的值,然后返回這個(gè)值。(有則查,無(wú)則增)
基本語(yǔ)法如下:
dict01.setdefault('key', 'default_value')
# 其中,key是你想要檢查的鍵,default_value是該鍵不存在時(shí)你想要設(shè)置的值。
print(dict01.setdefault('f')) # 查找的字典中不存在這個(gè)鍵時(shí)返回 None
print(dict01) # ==> {'name': 'John', 'age': 30, 'city': 'New York', 'key': 'default_value', 'f': None}
使用setdefault()方法的例子:
# 創(chuàng)建一個(gè)空字典
dict = {}
# 使用setdefault()添加一個(gè)鍵值對(duì)
dict.setdefault('name', 'John')
# 檢查'name'鍵是否存在,如果不存在則設(shè)置為'Jane'
# 但由于'name'已經(jīng)存在,所以不會(huì)改變其值
print(dict.setdefault('name', 'Jane')) # ==> John
# 添加一個(gè)新的鍵值對(duì),因?yàn)?age'鍵不存在
print(dict.setdefault('age', 30)) # ==> 30
print(dict) # ==> {'name': 'John', 'age': 30}
# 添加一個(gè)鍵,但不給值
print(dict.setdefault('f')) # ==> None
print(dict) # ==> {'name': 'John', 'age': 30, 'f': None}
3.刪
①、clear()方法用于刪除字典中的所有元素,使其變成一個(gè)空字典。這個(gè)方法沒(méi)有參數(shù),也不返回任何值(或者說(shuō)返回None)。
# 創(chuàng)建一個(gè)字典
dict05 = {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用clear()方法清空字典
dict05.clear()
# 打印清空后的字典
print(dict05) # ==> {}
②、pop()方法用于刪除字典中的一個(gè)元素(鍵值對(duì)),并返回該元素的值。你需要指定要?jiǎng)h除的元素的鍵作為pop()方法的參數(shù)。
如果指定的鍵在字典中不存在,pop()方法會(huì)拋出一個(gè)KeyError異常。為了避免這種情況,可以使用pop()方法的第二個(gè)可選參數(shù),它指定了如果鍵不存在時(shí)要返回的默認(rèn)值。
# 創(chuàng)建一個(gè)字典
dict05 = {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用pop()刪除'age'鍵,并返回其值
print(dict05.pop('age')) # ==> 30
# 打印刪除'age'鍵后的字典
print(dict05) # ==> {'name': 'John', 'city': 'New York'}
# 嘗試刪除不存在的鍵,并指定默認(rèn)值,這樣就不會(huì)報(bào)錯(cuò)
print(dict05.pop('sex',"None"))
# 使用pop()刪除'city'鍵,并指定默認(rèn)值(可隨意寫(xiě)),這樣就不會(huì)報(bào)錯(cuò),輸出值為字典內(nèi)的值
city = dict05.pop('city', '默認(rèn)值')
print(city) # ==> New York
# 打印最終的字典
print("最終的字典:", dict05) # ==> 最終的字典: {'name': 'John'}
③、popitem()方法用于刪除字典中的最后一個(gè)元素(鍵值對(duì)),并返回該元素作為一個(gè)元組(鍵,值)。需要注意的是,在Python 3.7及以后的版本中,字典是有序的,這意味著元素的添加順序會(huì)被保留,因此popitem()刪除的是最近添加的元素。
如果字典為空,調(diào)用popitem()會(huì)拋出一個(gè)KeyError異常。
# 創(chuàng)建一個(gè)字典
dict06 = {'name': 'John', 'age': 30, 'city': 'New York'}
# 使用popitem()刪除最后一個(gè)元素,并返回它
last_item = dict06.popitem()
print("刪除的最后一個(gè)元素:", last_item) # ==> 刪除的最后一個(gè)元素: ('city', 'New York')
# 打印刪除元素后的字典
print("刪除元素后的字典:", dict06) # ==> 刪除元素后的字典: {'name': 'John', 'age': 30}
# 如果字典為空,嘗試使用popitem()會(huì)拋出KeyError
try:
empty_dict = {}
empty_dict.popitem()
except KeyError as e:
print("錯(cuò)誤:", e) # ==> 錯(cuò)誤: 'popitem(): dictionary is empty'
4.改(更新)
update()方法用于更新字典中的元素。它可以將另一個(gè)字典的鍵值對(duì)添加到當(dāng)前字典中。如果當(dāng)前字典中存在要添加的鍵,則對(duì)應(yīng)的值會(huì)被新值替換;如果不存在,則會(huì)添加新的鍵值對(duì)。(有則改,無(wú)則增)
# 創(chuàng)建一個(gè)字典
dict07 = {'name': 'John', 'age': 30}
# 創(chuàng)建另一個(gè)字典
update_dict = {'age': 35, 'city': 'New York'}
# 使用update()方法更新my_dict
dict07.update(update_dict)
# 打印更新后的字典
print("更新后的字典:", dict07) # ==> 更新后的字典: {'name': 'John', 'age': 35, 'city': 'New York'}
5.查
①、get方法是字典提供的一個(gè)非常有用的方法,它允許你訪問(wèn)字典中的值,而不會(huì)引發(fā)KeyError異常,
如果鍵不存在,則返回None,或者返回你指定的默認(rèn)值。
語(yǔ)法如下:
value = dict.get('key', 'default=None')
key:你想要從字典中獲取值的鍵。
default:如果鍵不存在,則返回這個(gè)默認(rèn)值。如果不提供,默認(rèn)為None。
dict07 = {'name': 'John', 'age': 35, 'city': 'New York'}
name = dict07.get('name')
print(name) # ==> John
sex = dict07.get('sex') # 獲取一個(gè)不存在的鍵
print(sex) # ==> None
sex = dict07.get('sex','male') # 這樣當(dāng)鍵不存在時(shí),我們會(huì)得到這個(gè)默認(rèn)值
print(sex) # ==> male
print(dict07) # ==> {'name': 'John', 'age': 35, 'city': 'New York'}
②、keys()方法,它返回一個(gè)包含字典中所有鍵的視圖對(duì)象。
這個(gè)視圖對(duì)象顯示了字典中的鍵,并且可以用來(lái)迭代。
語(yǔ)法如下:
key_view = dict.keys()
key_view:這是一個(gè)視圖對(duì)象,包含了字典中的所有鍵。
dict07 = {'name': 'John', 'age': 35, 'city': 'New York'}
keys = dict07.keys()
print(keys) # ==> dict_keys(['name', 'age', 'city'])
# keys()方法返回的是一個(gè)視圖對(duì)象,而不是一個(gè)列表。
# 如果你需要一個(gè)列表,你可以使用list()函數(shù)來(lái)轉(zhuǎn)換它:
key_list = list(dict07.keys())
print(key_list) # ==> ['name', 'age', 'city']
③、values()方法,它返回一個(gè)包含字典中所有值的視圖對(duì)象。
這個(gè)視圖對(duì)象顯示了字典中的值,并且可以用來(lái)迭代。
語(yǔ)法如下:
value_view = dict07.values()
value_view:這是一個(gè)視圖對(duì)象,包含了字典中的所有值。
dict08 = {'name': 'John', 'age': 35, 'city': 'New York'}
values01 = dict08.values()
print('輸出值:',values01) # ==> dict_values(['John', 35, 'New York'])
# values()方法返回的是一個(gè)視圖對(duì)象,而不是一個(gè)列表。
# 如果你需要一個(gè)列表,你可以使用list()函數(shù)來(lái)轉(zhuǎn)換它:
value_list = list(dict08.values())
print('轉(zhuǎn)換值列表:',value_list) # ==> 轉(zhuǎn)換值列表: ['John', 35, 'New York']
④、items()方法,它返回一個(gè)包含字典中所有(鍵,值)對(duì)的視圖對(duì)象。
這個(gè)視圖對(duì)象顯示了字典中的鍵值對(duì),并且可以用來(lái)迭代。
語(yǔ)法如下:
item_view = dict.items()
item_view:這是一個(gè)視圖對(duì)象,包含了字典中的所有(鍵,值)對(duì)。
dict08 = {'name': 'John', 'age': 35, 'city': 'New York'}
items = dict08.items()
print(items) # ==> dict_items([('name', 'John'), ('age', 35), ('city', 'New York')])
#items()方法返回的是一個(gè)視圖對(duì)象,而不是一個(gè)列表。
# 如果你需要一個(gè)列表,你可以使用list()函數(shù)來(lái)轉(zhuǎn)換它:
item_list = list(dict08.items())
print(item_list) # ==> [('name', 'John'), ('age', 35), ('city', 'New York')]