本文目錄一覽:
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多出來的元素
{‘中’}
python字典的構成形式為
python字典的構成形式為:字典是Python語言中唯一的映射類型。
映射類型對象里哈希值(鍵,key)和悔櫻悶指向的對象(值,value)是一對多的關係,通常被認為是可變的哈希表。
字典對象是可變的,它是一個容器類型,能存儲任意個數的Python對象,其中也可包括其他容器類型。
字典類型與序列類型的區別:
1、存取和訪問數據的方式不同。
2、序列類型使用數字類型的鍵(從序列的開始按數值順序索引)。
3、映射類型可以用其他對象類型作鍵(如:數字、字符串、元祖,一般用字符串作鍵),和序列類型的鍵不同,映射類型的鍵直接或間接的和存儲數據值相關聯。
4、映射類型中的數據是無序排列的。這和序列類型是不一樣的,序列類型是以數值序排列的。
5、映射類型用鍵直接「映射」到值。
字典是Python中最強大的數據類型之一
使用字典的注意不能允許一鍵對應多個值;鍵必須是可哈希的。
len()返回字典的長度。
hash()返回對象的哈希值,可以用來判斷一個對象能否用來作為字典的鍵。
dict()工廠函數,用來創建字典頌跡。
python字典操作函數
字典是一種通過名字或者關鍵字引用的得數據結構,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型,基本的操作包括如下:
(1)len():返回字典中鍵—值對的數量;
(2)d[k]:返回關鍵字對於的值;
(3)d[k]=v:將值關聯到鍵值k上;
(4)del d[k]:刪除鍵值為k的項;
(5)key in d:鍵值key是否在d中,是返回True,否則返回False。
(6)clear函數:清除字典中的所有項
(7)copy函數:返回一個具有相同鍵值的新字典;deepcopy()函數使用深複製,複製其包含所有的值,這個方法可以解決由於副本修改而使原始字典也變化的問題
(8)fromkeys函數:使用給定的鍵建立新的字典,鍵默認對應的值為None
(9)get函數:訪問字典成員
(10)has_key函數:檢查字典中是否含有給出的鍵
(11)items和iteritems函數:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個迭代器對象而不是列表
(12)keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器
(13)pop函數:刪除字典中對應的鍵
(14)popitem函數:移出字典中的項
(15)setdefault函數:類似於get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值
(16)update函數:用一個字典更新另外一個字典
(17) values和itervalues函數:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由於在字典中值不是唯一的,所以列表中可以包含重複的元素
一、字典的創建
1.1 直接創建字典
d={‘one’:1,’two’:2,’three’:3}
printd
printd[‘two’]
printd[‘three’]
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
1.2 通過dict創建字典
# _*_ coding:utf-8 _*_
items=[(‘one’,1),(‘two’,2),(‘three’,3),(‘four’,4)]
printu’items中的內容:’
printitems
printu’利用dict創建字典,輸出字典內容:’
d=dict(items)
printd
printu’查詢字典中的內容:’
printd[‘one’]
printd[‘three’]
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
items中的內容:
[(‘one’,1), (‘two’,2), (‘three’,3), (‘four’,4)]
利用dict創建字典,輸出字典內容:
{‘four’:4,’three’:3,’two’:2,’one’:1}
查詢字典中的內容:
或者通過關鍵字創建字典
# _*_ coding:utf-8 _*_
d=dict(one=1,two=2,three=3)
printu’輸出字典內容:’
printd
printu’查詢字典中的內容:’
printd[‘one’]
printd[‘three’]
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
輸出字典內容:
{‘three’:3,’two’:2,’one’:1}
查詢字典中的內容:
二、字典的格式化字符串
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3,’four’:4}
printd
print”three is %(three)s.”%d
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘four’:4,’three’:3,’two’:2,’one’:1}
threeis3.
三、字典方法
3.1 clear函數:清除字典中的所有項
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3,’four’:4}
printd
d.clear()
printd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘four’:4,’three’:3,’two’:2,’one’:1}
{}
請看下面兩個例子
3.1.1
# _*_ coding:utf-8 _*_
d={}
dd=d
d[‘one’]=1
d[‘two’]=2
printdd
d={}
printd
printdd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘two’:2,’one’:1}
{}
{‘two’:2,’one’:1}
3.1.2
# _*_ coding:utf-8 _*_
d={}
dd=d
d[‘one’]=1
d[‘two’]=2
printdd
d.clear()
printd
printdd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘two’:2,’one’:1}
{}
{}
3.1.2與3.1.1唯一不同的是在對字典d的清空處理上,3.1.1將d關聯到一個新的空字典上,這種方式對字典dd是沒有影響的,所以在字典d被置空後,字典dd裏面的值仍舊沒有變化。但是在3.1.2中clear方法清空字典d中的內容,clear是一個原地操作的方法,使得d中的內容全部被置空,這樣dd所指向的空間也被置空。
3.2 copy函數:返回一個具有相同鍵值的新字典
# _*_ coding:utf-8 _*_
x={‘one’:1,’two’:2,’three’:3,’test’:[‘a’,’b’,’c’]}
printu’初始X字典:’
printx
printu’X複製到Y:’
y=x.copy()
printu’Y字典:’
printy
y[‘three’]=33
printu’修改Y中的值,觀察輸出:’
printy
printx
printu’刪除Y中的值,觀察輸出’
y[‘test’].remove(‘c’)
printy
printx
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
初始X字典:
{‘test’: [‘a’,’b’,’c’],’three’:3,’two’:2,’one’:1}
X複製到Y:
Y字典:
{‘test’: [‘a’,’b’,’c’],’one’:1,’three’:3,’two’:2}
修改Y中的值,觀察輸出:
{‘test’: [‘a’,’b’,’c’],’one’:1,’three’:33,’two’:2}
{‘test’: [‘a’,’b’,’c’],’three’:3,’two’:2,’one’:1}
刪除Y中的值,觀察輸出
{‘test’: [‘a’,’b’],’one’:1,’three’:33,’two’:2}
{‘test’: [‘a’,’b’],’three’:3,’two’:2,’one’:1}
註:在複製的副本中對值進行替換後,對原來的字典不產生影響,但是如果修改了副本,原始的字典也會被修改。deepcopy函數使用深複製,複製其包含所有的值,這個方法可以解決由於副本修改而使原始字典也變化的問題。
# _*_ coding:utf-8 _*_
fromcopyimportdeepcopy
x={}
x[‘test’]=[‘a’,’b’,’c’,’d’]
y=x.copy()
z=deepcopy(x)
printu’輸出:’
printy
printz
printu’修改後輸出:’
x[‘test’].append(‘e’)
printy
printz
運算輸出:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
輸出:
{‘test’: [‘a’,’b’,’c’,’d’]}
{‘test’: [‘a’,’b’,’c’,’d’]}
修改後輸出:
{‘test’: [‘a’,’b’,’c’,’d’,’e’]}
{‘test’: [‘a’,’b’,’c’,’d’]}
3.3 fromkeys函數:使用給定的鍵建立新的字典,鍵默認對應的值為None
# _*_ coding:utf-8 _*_
d=dict.fromkeys([‘one’,’two’,’three’])
printd
運算輸出:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:None,’two’:None,’one’:None}
或者指定默認的對應值
# _*_ coding:utf-8 _*_
d=dict.fromkeys([‘one’,’two’,’three’],’unknow’)
printd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:’unknow’,’two’:’unknow’,’one’:’unknow’}
3.4 get函數:訪問字典成員
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
printd.get(‘one’)
printd.get(‘four’)
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
1
None
註:get函數可以訪問字典中不存在的鍵,當該鍵不存在是返回None
3.5 has_key函數:檢查字典中是否含有給出的鍵
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
printd.has_key(‘one’)
printd.has_key(‘four’)
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
True
False
3.6 items和iteritems函數:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個迭代器對象而不是列表
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
list=d.items()
forkey,valueinlist:
printkey,’:’,value
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
three :3
two :2
one :1
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
it=d.iteritems()
fork,vinit:
print”d[%s]=”%k,v
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
d[three]=3
d[two]=2
d[one]=1
3.7 keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
printu’keys方法:’
list=d.keys()
printlist
printu’\niterkeys方法:’
it=d.iterkeys()
forxinit:
printx
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
keys方法:
[‘three’,’two’,’one’]
iterkeys方法:
three
two
one
3.8 pop函數:刪除字典中對應的鍵
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
d.pop(‘one’)
printd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
{‘three’:3,’two’:2}
3.9 popitem函數:移出字典中的項
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
d.popitem()
printd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:1}
{‘two’:2,’one’:1}
3.10 setdefault函數:類似於get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值
# _*_ coding:utf-8 _*_
d={‘one’:1,’two’:2,’three’:3}
printd
printd.setdefault(‘one’,1)
printd.setdefault(‘four’,4)
printd
運算結果:
{‘three’:3,’two’:2,’one’:1}
{‘four’:4,’three’:3,’two’:2,’one’:1}
3.11 update函數:用一個字典更新另外一個字典
# _*_ coding:utf-8 _*_
d={
‘one’:123,
‘two’:2,
‘three’:3
}
printd
x={‘one’:1}
d.update(x)
printd
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
{‘three’:3,’two’:2,’one’:123}
{‘three’:3,’two’:2,’one’:1}
3.12 values和itervalues函數:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由於在字典中值不是唯一的,所以列表中可以包含重複的元素
# _*_ coding:utf-8 _*_
d={
‘one’:123,
‘two’:2,
‘three’:3,
‘test’:2
}
printd.values()
運算結果:
=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======
[2,3,2,123]
python 字典創建問題?
python創建文件與文件夾1.文件的創建:一般創建.txt文件函數open(file,’mode’)file為文件地址,若不存在則新建,若不再本目錄下,可以寫絕對路徑mode有以下幾種方式:r只讀 rb二進制只讀 w寫入且原有內容覆蓋 a在文件末尾追加打開後文件需要.close()關閉2.文件夾的創建:使用os.mkdir(ad)方式建立,ad為新建文件夾名稱的絕對路徑
Python創建字典語法和字典應用場景是什麼?
字典的學習目標分為四個:
第一個是字典的應用場景(作用);
第二個是創建字典的語法;
第三個是字典常見操作,
第四個是字典的循環遍歷。
思考1: 如果有多個數據,例如:』Rose』,』女』,』30』,如何快速存儲這些數據?
答:列表
思考2: 如何查找到數據』Rose』
答: 查找到下標為0的數據即可
思考3:如果將來數據順序發生變化,如下所示,還能用下標訪問到數據』Rose』嗎?
答: 不能,數據』Rose』此時下標為2
思考4: 數據順序發生變化,每個數據的下標也會隨之變化,如何保證數據順序變化前後能使用同一種方法查找數據呢?
答:使用字典,字典裏面的數據是以鍵值對的形式出現的,字典數據和數據順序沒有關係,即字典不支持下標,後期無論數據如何變化,只需要按照對應的鍵的名字查找數據即可。
字典特點:
以下是創建字典的3種方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/275825.html