Python3字典與集合


一、Python3字典

字典是另一種可變容器模型,且可存儲任意類型對象
字典的每個鍵值(key=>value)對用冒號":"分割,每個鍵值對之間用逗號","分割,整個字典包括在花括號"{}"中,格式如下所示:

dict = {key1:value1,key2:value2,......,keyN:valueN}

注意:
  鍵必須是唯一的,但值則不必
  值可以取任何數據類型,但鍵則必須是不可變的,如: 字符串,數字或元組

1、創建一個字典

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(dict)
輸出結果為:
{'name': 'lrving', 'gender': 'boy', 'age': 23, 'identity': 'student', 'university': 'tsinghua'}

2、訪問字典里的值

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(dict['name'])  #訪問字典dict中鍵name的值
print(dict['age'])   #訪問字典dict中鍵age的值
輸出結果為:
lrving
23 

3、修改字典

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(dict)
dict['age'] = 20  #更新鍵age的值
dict['university'] = 'Peking University'  #更新鍵university的值
print(dict)
輸出結果為:
{'name': 'lrving', 'gender': 'boy', 'age': 23, 'identity': 'student', 'university': 'tsinghua'}
{'name': 'lrving', 'gender': 'boy', 'age': 20, 'identity': 'student', 'university': 'Peking University'} 

4、刪除字典元素

能刪單一的元素也能清空字典,清空只需一項操作

4.1、刪除單一的鍵

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
del dict['university'] #刪除鍵university
print(dict)
輸出結果為:
{'name': 'lrving', 'gender': 'boy', 'age': 23, 'identity': 'student'}

4.2、清空字典

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
dict.clear() #清空字典
print(dict)
輸出結果為:
{}

4.3、刪除字典

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
del dict
print(dict)
輸出結果為:(但這會引發一個異常,因為用執行 del 操作后字典不再存在)
Traceback (most recent call last):
File "/Users/liwenfeng/PycharmProjects/Python/study.py", line 157, in <module>
print(dict['name'])
TypeError: 'type' object is not subscriptable

說明字典dict已經被刪除了

5、字典鍵的特性

字典值可以是任何的python對象,既可以是標准的對象,也可以是用戶定義的,但鍵不行
兩個重要的點需要記住:

5.1、在一個字典中不允許同一個鍵出現兩次,創建字典時如果同一個鍵被賦值兩次,則只識別后面的值,示例如下:

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','age':34,'name':'james'}  #鍵name和age出現兩次
print(dict)
輸出結果為:
{'name': 'james', 'gender': 'boy', 'age': 34, 'identity': 'student'}  #可以看出鍵name和age只識別了后面的兩個值james和34

5.2、鍵必須是不可變的,所以可以用數字,字符串和元組充當,而列表則不可行,如下示例:

dict = {['name']:'lrving','gender':'boy',['age']:23}
print(dict['name'])
輸出結果為:
Traceback (most recent call last):
File "/Users/liwenfeng/PycharmProjects/Python/study.py", line 158, in <module>
dict = {['name']:'lrving','gender':'boy',['age']:23}
TypeError: unhashable type: 'list'

由此可看出在字典中使用列表是不可行的

6、字典內置函數&方法

6.1、len(dict): 計算字典元素個數,即鍵的總數

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(len(dict))
輸出結果為:
5

6.2、str(dict): 輸出字典,以可打印的字符串表示

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(str(dict))
輸出結果為:
{'name': 'lrving', 'gender': 'boy', 'age': 23, 'identity': 'student', 'university': 'tsinghua'}

6.3、type(variable): 返回輸入的變量類型,如果變量是字典就返回字典類型

dict = {'name':'lrving','gender':'boy','age':23,'identity':'student','university':'tsinghua'}
print(type(dict))
輸出結果為:
<class 'dict'>

7、Python字典包含了以下內置方法

7.1、radiansdict.clear()

刪除字典內所有元素

7.2、radiansdict.copy()

返回一個字典的淺復制

7.3、radiansdict.fromkeys()

創建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值

7.4、radiansdict.get(key, default=None)

返回指定鍵的值,如果值不在字典中返回default值

7.5、key in dict

如果鍵在字典dict里返回true,否則返回false

7.6、radiansdict.items()

以列表返回可遍歷的(鍵,值)元組數組

7.7、radiansdict.keys()

返回一個迭代器,可以使用"list()"來轉換為列表

7.8、radiansdict.setdefault(key, default=None)

和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default

7.9、radiansdict.update(dict2)

把字典dict2的鍵/值對更新到dict里

7.10、radiansdict.values()

返回一個迭代器,可以使用"list()"來轉換為列表

7.11、pop(key[,default])

刪除字典給定鍵"key"所對應的值,返回值為被刪除的值;key值必須給出;否則,返回default值

7.12、popitem()

隨機返回並刪除字典中的最后一對鍵和值

二、Python3集合

集合(set)是一個"無序的不重復元素序列"
如果集合中有兩個或兩個以上相同的元素,則在取值時只會取一個(去重)
可以使用大括號"{ }"或者"set()"函數創建集合,注意: 創建一個空集合必須用"set()"而不是"{ }",因為"{ }"是用來創建一個空字典

1、創建一個集合

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
b = set('lrving11curry30klay11')
print(a)
print(b)
輸出結果為:
{'kobe', 'heat', 'AD', 'wade', '3', 23, 'james', 'lakers'}
{'n', 'g', '1', 'a', 'u', 'k', '0', 'l', 'i', 'v', '3', 'r', 'c', 'y'}

2、集合的運算

a = set('cbdcjdsuac')
b = set('ejciaugejasye')
print(a)
print(b)
print(a - b)  #a中包含但b中不包含的元素
print(b - a)  #b中包含但a中不包含的元素
print(a | b)  #a和b的並集
print(a & b)  #a和b的交集
print(a ^ b)  #不同時包含a和b的元素
輸出結果為:
{'c', 'u', 'a', 's', 'j', 'b', 'd'}
{'u', 'a', 's', 'y', 'j', 'e', 'i', 'c', 'g'}
{'b', 'd'}
{'i', 'y', 'g', 'e'}
{'i', 'c', 'g', 'u', 'a', 's', 'y', 'j', 'e', 'b', 'd'}
{'u', 'a', 's', 'j', 'c'}
{'b', 'y', 'e', 'i', 'd', 'g'}

2.1、類似列表推導式,同樣集合支持集合推導式(Set comprehension)

a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)
輸出結果為:
{'d', 'r'}

3、集合的基本操作(add;update)

3.1、給一個集合添加一個元素

方法一:

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
a.add('NBA')
print(a)
輸出結果為:
{'heat', 'kobe', 'NBA', 'lakers', 'AD', 'wade', 'james', '3', 23}

方法二:
可以添加元素,且參數可以是列表,元組,字典等,語法格式如下

a.update(x)   #"x"可以有多個,用逗號隔開

示例:

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
a.update([1,'lrving','Antetokounmpo']) #在集合中添加一個列表
a.update((2,'six','five'))  #在集合中添加一個元組
a.update({'name':'Howard'}) #在集合中添加字典時,只會添加字典的鍵,而不會是鍵的值
print(a)
輸出結果為:
{1, 'heat', 2, 'name', 'Antetokounmpo', 'five', 'AD', 'wade', 'kobe', 'lrving', 'six', 'lakers', 23, 'james', '3'}

3.2、移除元素(remove,discard,pop)

方法一:
語法格式:

a.remove(x) #將元素"x"從集合"a"中移除,如果元素不存在,則會發生錯誤

示例:

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
a.remove("heat")
print(a)
輸出結果為:
{'3', 'kobe', 'james', 23, 'lakers', 'wade', 'AD'}

方法二:
語法格式:

a.discard(x)

示例:

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
a.discard('heat')
a.discard('Cleveland') #當覆蓋的元素在集合中不存在時,也不會報錯
print(a)
輸出結果為:
{'3', 'james', 'lakers', 'wade', 23, 'kobe', 'AD'}

方法三:
語法格式:

a.pop() #這種方法是隨機刪除集合中的某一個元素

示例:

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
a.pop() 
print(a)
輸出結果為: (此結果是連續執行兩次的結果)
{'kobe', 'wade', 'AD', 'james', 23, 'heat', 'lakers'} #刪除了'3'這個元素
{'heat', 'wade', 'kobe', 'lakers', 'james', 23, '3'} #刪除了'AD'這個元素

注意: 在交互模式下,這種方法是刪除集合的第一個元素----切記! 切記! 切記!

3.3、計算集合元素個數

a = {'lakers','james',23,'heat','wade','3','kobe','AD'}
print(len(a))
輸出結果為:
8

4、清空集合

語法格式: 
a.clear()
a = {'lakers','james',23,'heat','wade','3','kobe','AD'} a.clear() print(a) 輸出結果為: set()

5、判斷元素是否在集合中存在

語法格式: 
x in a #返回結果為True和Flase
a = {'lakers','james',23,'heat','wade','3','kobe','AD'} print('cleveland' in a) print(23 in a) 輸出結果為: False True

6、集合內置方法完整列表

6.1、add()

為集合添加元素

6.2、clear()

移除集合中的所有元素

6.3、copy()

拷貝一個集合

6.4、difference()

返回多個集合的差集

6.5、difference_update()

移除集合中的元素,該元素在指定的集合也存在

6.6、discard()

刪除集合中指定的元素

6.7、intersection()

返回集合的交集

6.8、intersection_update()

返回集合的交集

6.9、isdisjoint()

判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False

6.10、issubset()

判斷指定集合是否為該方法參數集合的子集

6.11、issuperset()

判斷該方法的參數集合是否為指定集合的子集

6.12、pop()

隨機移除元素

6.13、remove()

移除指定元素

6.14、symmetric_difference()

返回兩個集合中不重復的元素集合

6.15、symmetric_difference_update()

移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中

6.16、union()

返回兩個集合的並集

6.17、update()

給集合添加元素

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM