刻意練習Python基礎 ——day 08:字典與集合

原文鏈接:https://www.runoob.com/python3/python3-set.html
17天 —— Python基礎刻意練習

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. 字典

  字典是另一種可變容器模型,且可存儲任意類型對象。
  字典的每個鍵值 (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() 給集合添加元素

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章