Day 01——Task01:變量、運算符與數據類型
Day 02——Task02:條件與循環
Day 03——Task03:列表與元組(上)
Day 04——Task03:列表與元組(下)
Day 05——Task04:字符串與序列
Day 06——Task05:函數與Lambda表達式(上)
Day 07——Task05:函數與Lambda表達式(下)
Day 08——Task06:字典與集合
Day 09——Task07:文件與文件系統(上)
Day 10——Task07:文件與文件系統(下)
Day 11——Task08:異常處理
Day 12——Task09:else 與 with 語句
Day 13——Task10:類與對象(上)
Day 14——Task10:類與對象(下)
Day 15——Task11:魔法方法(上)
Day 16——Task11:魔法方法(下)
Day 17——Task12:模塊
文章目錄
- 1. 字典
- 1.1. 訪問字典裏的值
- 1.2. 更新字典
- 1.3. 字典鍵的特性
- 1.4. 字典內置函數&方法
- 1.4.1. 字典內置函數
- 1.4.2. 字典內置方法
- 1.4.2.1. radiansdict.clear()
- 1.4.2.2. radiansdict.copy()
- 1.4.2.3 radiansdict.fromkeys()
- 1.4.2.4 radiansdict.get(key, default=None)
- 1.4.2.5 key in dict
- 1.4.2.6 radiansdict.items()
- 1.4.2.7 radiansdict.keys()
- 1.4.2.8 radiansdict.setdefault(key, default=None)
- 1.4.2.9 radiansdict.update(dict2)
- 1.4.2.10 radiansdict.values()
- 1.4.2.11 pop(key[,default])
- 1.4.2.12 popitem()
- 2. 集合
- 參考資料
1. 字典
字典是另一種可變容器模型,且可存儲任意類型對象。
字典的每個鍵值 (key => value) 對用冒號 ( : ) 分割,每個對之間用逗號 ( , ) 分割,整個字典包括在花括號 ({}) 中 ,格式如下所示:
dict1 = {key1 : value1, key2 : value2 }
- 鍵必須是唯一的,但值則不必。
- 值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
一個簡單的字典實例:
dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
也可如此創建字典:
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }
1.1. 訪問字典裏的值
把相應的鍵放入到方括號中,如下實例:
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("dict1['first']: ", dict1['first'])
print ("dict1['second']: ", dict1['second'])
print ("dict1['num1']: ", dict1['num1'])
# dict1['first']: Mive
# dict1['second']: -Vax
# dict1['num1']: 5
如果用字典裏沒有的鍵訪問數據,會輸出錯誤如下:
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("dict1['num2']: ", dict1['num2'])
# KeyError: 'num2'
1.2. 更新字典
1.2.1 添加字典裏的信息
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict1['num2'] = 3
print ("dict1['num2']: ", dict1['num2'])
# dict1['num2']: 3
1.2.2 修改字典裏的信息
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict1['num1'] = 3
print ("dict1['num1']: ", dict1['num1'])
# dict1['num1']: 3
1.2.3 刪除字典裏的信息
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
del dict1['first'] # 刪除鍵 'first'
print(dict1)
# {'second': '-Vax', 'num1': '5'}
dict.clear() # 清空字典
print(dict1)
# TypeError: descriptor 'clear' of 'dict' object needs an argument
del dict # 刪除字典
print(dict1)
# TypeError: descriptor 'clear' of 'dict' object needs an argument
1.3. 字典鍵的特性
字典值可以是任何的 python 對象,既可以是標準的對象,也可以是用戶定義的,但鍵不行。
兩個重要的點需要記住:
- 不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,後一個值會被記住
dict1 = {'first': 'Mive', 'first':'-Vax'}
print(dict1)
# {'first': '-Vax'}
- 鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行
dict1 = {['first']: 'Mive', 'second':'-Vax', 'num1': '5'}
print(dict1)
TypeError: unhashable type: 'list'
1.4. 字典內置函數&方法
1.4.1. 字典內置函數
1.4.1.1. len(dict)
計算字典元素個數,即鍵的總數。
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(len(dict1))
# 3
1.4.1.2. str(dict)
輸出字典,以可打印的字符串表示。
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(str(dict1))
# {'first': 'Mive', 'second': '-Vax', 'num1': '5'}
1.4.1.3. type(variable)
返回輸入的變量類型,如果變量是字典就返回字典類型。
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(type(dict1))
# <class 'dict'>
1.4.2. 字典內置方法
1.4.2.1. radiansdict.clear()
刪除字典內所有元素
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict.clear()
print(dict1)
# TypeError: descriptor 'clear' of 'dict' object needs an argument
1.4.2.2. radiansdict.copy()
返回一個字典的淺複製
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict2 = dict1.copy()
print ("新複製的字典爲 : ",dict2)
# 新複製的字典爲 : {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
1.4.2.3 radiansdict.fromkeys()
創建一個新字典,以序列seq中元素做字典的鍵,val爲字典所有鍵對應的初始值
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict1 = dict1.fromkeys(dict1)
print ("新的字典爲 : %s" % str(dict1))
# 新的字典爲 : {'first': None, 'second': None, 'num1': None}
dict1 = dict1.fromkeys(dict1, 10)
print ("新的字典爲 : %s" % str(dict1))
#新的字典爲 : {'first': 10, 'second': 10, 'num1': 10}
1.4.2.4 radiansdict.get(key, default=None)
返回指定鍵的值,如果值不在字典中返回default值
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("'first' 值爲 : %s" % dict1.get('first'))
# 'first' 值爲 : Mive
print ("'num2' 值爲 : %s" % dict1.get('num2', "NA"))
# 'num2' 值爲 : NA
1.4.2.5 key in dict
如果鍵在字典dict裏返回true,否則返回false
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
if 'first' in dict1:
print("鍵 first 存在")
else :
print("鍵 first 不存在")
if 'num2' in dict1:
print("鍵 num2 存在")
else :
print("鍵 num2 不存在")
# not in
if 'num2' not in dict1:
print("鍵 num2 不存在")
else :
print("鍵 num2 存在")
# 鍵 first 存在
# 鍵 num2 不存在
# 鍵 num2 不存在
1.4.2.6 radiansdict.items()
以列表返回可遍歷的(鍵, 值) 元組數組
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("Value : %s" % dict1.items())
# Value : dict_items([('first', 'Mive'), ('second', '-Vax'), ('num1', '5')])
1.4.2.7 radiansdict.keys()
返回一個迭代器,可以使用 list() 來轉換爲列表
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(dict1.keys())
# dict_keys(['first', 'second', 'num1'])
print(list(dict1.keys()))
# ['first', 'second', 'num1']
1.4.2.8 radiansdict.setdefault(key, default=None)
和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設爲default
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("first 鍵的值爲 : %s" % dict1.setdefault('first', None))
print ("second 鍵的值爲 : %s" % dict1.setdefault('second', None))
print ("num2 鍵的值爲 : %s" % dict1.setdefault('num2', 3))
print ("新字典爲:", dict1)
# first 鍵的值爲 : Mive
# second 鍵的值爲 : -Vax
# num2 鍵的值爲 : 3
# 新字典爲: {'first': 'Mive', 'second': '-Vax', 'num1': '5', 'num2': 3}
1.4.2.9 radiansdict.update(dict2)
把字典dict2的鍵/值對更新到dict裏
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
dict2 = {'num2': 3}
dict1.update(dict2)
print ("更新字典 dict1 : ", dict1)
# 更新字典 dict1 : {'first': 'Mive', 'second': '-Vax', 'num1': '5', 'num2': 3}
1.4.2.10 radiansdict.values()
返回一個迭代器,可以使用 list() 來轉換爲列表
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print ("字典所有值爲 : ", list(dict1.values()))
# 字典所有值爲 : ['Mive', '-Vax', '5']
1.4.2.11 pop(key[,default])
刪除字典給定鍵 key 所對應的值,返回值爲被刪除的值。key值必須給出。 否則,返回default值。
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(dict1.pop('first'))
# Mive
1.4.2.12 popitem()
隨機返回並刪除字典中的最後一對鍵和值。
dict1 = {'first': 'Mive', 'second':'-Vax', 'num1': '5'}
print(dict1.pop('first'))
# Mive
print(dict1)
# {'second': '-Vax', 'num1': '5'}
2. 集合
集合(set)是一個無序的不重複元素序列。
可以使用大括號 { }
或者 set()
函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因爲 { } 是用來創建一個空字典。
創建格式爲parame = {value01,value02,...}
或者set(value)
。
set1 = {'Mive','-Vax',5,3,'Mive',5}
# 這裏演示的是去重功能
print(set1)
# {'-Vax', 3, 5, 'Mive'}
# 快速判斷元素是否在集合內
print('Mive' in set1)
# True
print(8 in set1)
# False
# 下面展示兩個集合間的運算.
set2 = set('MiveVax')
set3 = set('iiValy')
print(set2)
# {'V', 'i', 'M', 'x', 'e', 'v', 'a'}
# 集合a中包含而集合b中不包含的元素
print(set2 - set3)
# {'M', 'v', 'x', 'e'}
# 集合a或b中包含的所有元素
print(set2 | set3)
# {'V', 'i', 'M', 'x', 'y', 'l', 'e', 'v', 'a'}
# 集合a和b中都包含了的元素
print(set2 & set3)
# {'a', 'V', 'i'}
# 不同時包含於a和b的元素
print(set2 ^ set3)
# {'M', 'x', 'l', 'y', 'e', 'v'}
類似列表推導式,同樣集合支持集合推導式(Set comprehension):
set4 = {x for x in 'Mive-Vax' if x not in 'ive-'}
print(set4)
# {'x', 'V', 'a', 'M'}
2.1. 更新集合
2.1.1 添加元素
將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。
set1 = set('Mive')
set1.add('-Vax')
print(set1)
# {'v', 'M', '-Vax', 'e', 'i'}
還有一個方法,也可以添加元素,且參數可以是列表,元組,字典等,語法格式如下:
set1 = set('Mive')
set1.update({5,3})
print(set1)
# {3, 'e', 'v', 5, 'i', 'M'}
set1.update({8,3},{1,2})
print(set1)
# {1, 2, 3, 5, 8, 'i', 'e', 'v', 'M'}
2.1.2 移除元素
set1 = set("Mive-Vax")
set1.remove("-")
print(set1)
# {'M', 'e', 'x', 'V', 'v', 'i', 'a'}
set1.remove("ASD")
print(set1)
# KeyError: 'ASD'
此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:
set1 = set("Mive-Vax")
set1.discard("ASD")
print(set1)
# {'V', 'M', 'x', 'a', 'i', 'e', '-', 'v'}
我們也可以設置隨機刪除集合中的一個元素,語法格式如下:
set1 = set("Mive-Vax")
x = set1.pop()
print(x)
# -
多次執行測試結果都不一樣。
然而在交互模式,pop 是刪除集合的第一個元素(排序後的集合的第一個元素)。
>>> set1 = set("Mive-Vax")
>>> x = set1.pop()
>>> print(x)
i
2.1.3 清空集合
set1 = set("Mive-Vax")
set1.clear()
print(set1)
# set()
2.2. 計算集合元素個數
set1 = set("Mive-Vax")
print(len(set1))
# 8
2.3. 判斷元素是否在集合中存在
判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
set1 = set(("Mive","Vax"))
print('vax' in set1)
print('Vax' in set1)
# False
# True
2.4. 集合內置方法完整列表
方法 | 描述 |
---|---|
add() | 爲集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷貝一個集合 |
difference() | 返回多個集合的差集 |
difference_update() | 移除集合中的元素,該元素在指定的集合也存在。 |
discard() | 刪除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。 |
issubset() | 判斷指定集合是否爲該方法參數集合的子集。 |
issuperset() | 判斷該方法的參數集合是否爲指定集合的子集 |
pop() | 隨機移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回兩個集合中不重複的元素集合。 |
symmetric_difference_update() | 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中。 |
union() | 返回兩個集合的並集 |
update() | 給集合添加元素 |