一、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()
給集合添加元素