當前位置:成語大全網 - 新華字典 - Python其實很簡單 第十章 字典與集合

Python其實很簡單 第十章 字典與集合

前面介紹的列表和元組都是有序序列,而字典與集合屬於無序序列,也就是說,不能通過索引來操作元素。

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多出來的元素

{'中'}