前面介紹的列表和元組都是有序序列,而字典與集合屬於無序序列,也就是說,不能通過索引來操作元素。
10.1 字典
語法格式:
dictionary= {key1 : value1, key2 : value2, key3 : value3 ,...., key n : value n }
其中,dictionary是字典名稱,key表示元素的鍵,value表示元素的值,鍵和值必須是成對的。
如:
>>> dict1 = { 'abc': 123, 98.6: 37 }
>>> dict1
{'abc': 123, 98.6: 37}
可以看出,鍵可以是字符串、數字或者元組,但必須是唯壹的;而值可以是任何數據類型,也沒有要求是唯壹的。
1、創建字典的方法
方法壹:同時給定鍵和值,即“關鍵字參數”形式。
dictionary=dict(key1=value1,key2=value2,.....,key n=value n)
註意:這裏的key 必須符合Python標識符的命名規則。
例:
先使用“{}”創建字典:
>>> dict1={1:'壹',2:'二',3:'三',4:'四',5:'五'}
>>> dict1
{1: '壹', 2: '二', 3: '三', 4: '四', 5: '五'}
再通過“關鍵字參數”形式創建:
>>> dict1=dict(1='壹',2='二',3='三',4='四',5='五')
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
創建不成功,原因在於key 不符合Python標識符的命名規則。前面已經介紹過,標識符不能用數字表示或者用數字打頭。
現在對鍵如下修改:
>>> dict1=dict(n1='壹',n2='二',n3='三',n4='四',n5='五') #在數字前加了壹個字符”n”
>>> dict1
{'n1': '壹', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}
方法二 :使用已經存在的元組和列表通過映射函數創建字典。
格式:dictionary=dict(zip(tuplekey,listvalue))
例:
>>> tuplekey=('n1','n2','n3','n4','n5') #鍵的序列采用元組
>>> listvalue=['壹','二','三','四','五'] #值的序列采用列表
>>> dict1=dict(zip(tuplekey,listvalue))
>>> dict1
{'n1': '壹', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}
註意:tuple(listname)函數可以將列表轉換為元組,list(tuplename)函數可以將元組轉換為列表。
2、通過鍵訪問字典
直接獲取鍵的相應元素的值
>>> dict1['n2']
'二'
利用get()方法
>>> dict1.get('n2')
'二'
get()方法也可以帶參數,當要訪問的鍵不存在時返回壹個字符串。如:
>>> dict1.get('n0','can't find!') #當要查找的鍵不存在,返回'can't find!'
"can't find!"
3、遍歷字典
使用字典對象的items()方法可以獲取字典的“鍵.值對”列表。
>>> for item in dict1.items():
print(item)
('n1', '壹')
('n2', '二')
('n3', '三')
('n4', '四')
('n5', '五')
也可以獲取具體的每個元素的鍵和值,如:
>>> for key,value in dict1.items():
print(key,'對應的是',value)
n1 對應的是 壹
n2 對應的是 二
n3 對應的是 三
n4 對應的是 四
n5 對應的是 五
4、添加、修改和刪除字典元素
使用下面的語句,若指定的鍵存在,就可以修改該元素的值;若指定的鍵不存在,則添加該元素。如:
>>> dict1['n6']='六' # 鍵’n6’不存在,故添加該元素
>>> dict1
{'n1': '壹', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五', 'n6': '六'}
>>> dict1['n4']='肆' # 鍵’n4’存在,故修改該元素
>>> dict1
{'n1': '壹', 'n2': '二', 'n3': '三', 'n4': '肆', 'n5': '五', 'n6': '六'}
5、利用推導式建立字典
import random
dict1={i:random.randint(1,100) for i in range(5)}
# 生成元素的鍵為0到5整數,值為1到100之間的隨機數
print(dict1)
運行結果:{0: 28, 1: 59, 2: 79, 3: 30, 4: 88}
10.2 集合
集合是數學中壹個很重要的概念,集合具有確定性、互異性、無序性三個基本屬性。在Python中,集合同樣具有這三個基本屬性,其中,確定性是指對象要麽是集合的元素,要麽不是集合的元素;互異性是指集合中的元素不能重復;無序性是指集合中的元素不分先後次序,可以隨意更換位置。
1、集合的創建
直接使用“{}”創建
>>> set1={'春','夏','秋','冬'}
>>> set1
{'秋', '春', '冬', '夏'}
>>> set2={3,2,1,4,5}
>>> set2
{1, 2, 3, 4, 5}
利用已有的列表、元組創建集合
>>> list1=['東','南','西','北']
>>> set3=set(list1)
>>> set3
{'南', '東', '北', '西'}
利用已有的集合建立壹個“副本”
>>> set3
{'南', '東', '北', '西'} #set3和set4的值壹樣
>>> set4=set3
>>> set4
{'南', '東', '北', '西'}
>>> set4.add('中') #給set4添加元素
>>> set4
{'西', '中', '東', '南', '北'} # 這個好理解
>>> set3
{'西', '中', '東', '南', '北'} # 意想不到吧?Set3為什麽會發生變化?
再看看簡單變量的情況:
>>> a=2
>>> b=a #是不是與前面set4=set3相似
>>> b+=1
>>> b
3
>>> a
2 #但a的值並沒有發生改變
從上面集合set3、set4和簡單變量a、b的值的變化情況對比,不難發現set3和set4是指向同壹地址的對象,而變量a和變量b指向了不同地址,語句b=a是將a的值傳遞個b,並不是將a的地址傳遞給b。列表、元組、字典都和集合壹樣具有這樣的性質。
所以,將set4稱為set3的“副本”更為恰當。
2、添加和刪除元素
>>> set3
{'南', '東', '北', '西'}
>>> set3.add('中') # 添加元素
>>> set3
{'西', '中', '東', '南', '北'} # 集合內的元素是無序的,不要糾結次序的變化
>>> set3.remove('中') # 刪除元素
>>> set3
{'西', '東', '南', '北'}
3、集合運算
集合運算包括交(&)、並(|)、差(-),和數學中的集合運算是壹致的。
>>> set3={'南', '東', '北', '西'}
>>> set4={'西', '中', '東', '南', '北'}
>>> set3 & set4 #取set3和set4的交集
{'西', '南', '北', '東'}
>>> set3 | set4 #取set3和set4的並集
{'中', '南', '北', '西', '東'}
>>> set3 - set4 #取set3與set4的差,即set3比set4多出來的元素
set()
>>> set4 -set3 #取set4與set3的差,即set4比set3多出來的元素
{'中'}