Python中的字典類型是有鍵值對(duì)(key:value)構(gòu)成的一種類型。Python字典可以存儲(chǔ)任何數(shù)據(jù)類型的數(shù)據(jù)。
(1)Python字典是一種鍵-值對(duì)數(shù)據(jù)類型,一旦定義,其鍵不可以修改,但值可以修改;
(2)Python字典中的鍵是唯一的,即一個(gè)字典中不允許有相同的鍵;
(3)Python字典是一種無序的鍵-值集合,即像集合那樣,不能使用位置索引來訪問或修改字典中的鍵-值;
(4)Python字典的鍵值放在一對(duì)花括號(hào){}中,每個(gè)鍵值使用英文半角的逗號(hào)進(jìn)行分隔;
(5)既然Python字典的鍵是不可變的,那么就可以使用字符串、數(shù)字、元組來作為字典的鍵;
(6)Python中的值可以為任何類型,也可以是None.
字典的基本語法形式如下:
d = { key1 : value1, key2 : value2 }
下面舉例子來說明:
>>> price = { "蘋果" : 8.9, "櫻桃" : 19.78, "桔子" : 6.5}
>>> print(price)
{'蘋果': 8.9, '櫻桃': 19.78, '桔子': 6.5}
>>>
我們也可以使用字典構(gòu)造函數(shù) dict() 來創(chuàng)建一個(gè)字典。
>>> dic1 = dict( name = '武林網(wǎng)', age = 12, type ='互聯(lián)網(wǎng)')
>>> print(dic1)
{'name': '武林網(wǎng)', 'age': 12, 'type': '互聯(lián)網(wǎng)'}
>>> dic2 = dict([('name', '武林網(wǎng)'), ('age', 12), ('type', '互聯(lián)網(wǎng)')])
>>> print(dic2)
{'name': '武林網(wǎng)', 'age': 12, 'type': '互聯(lián)網(wǎng)'}
>>> dic3 = dict({'name' : '武林網(wǎng)', 'age' : 12, 'type' : '互聯(lián)網(wǎng)'})
>>> print(dic3)
{'name': '武林網(wǎng)', 'age': 12, 'type': '互聯(lián)網(wǎng)'}
>>>
以上在Python3.8.2中運(yùn)行的情況如下圖所示:
我們可以使用 字典名[鍵名] 的方式來訪問字典中的值。
>>> dic1= {'nickname' : 'xiangyuting', 'account' : 'VeVb', 'regdate' : '2008-08-20'}
>>> dic1['nickname']
'xiangyuting'
>>> dic1['regdate']
'2008-08-20'
>>>
如果企圖訪問不存在的鍵將會(huì)引發(fā)錯(cuò)誤:
>>> dic = { '1' : 'a', '2' : 'b', '3' : 'c'}
>>> print(dic['4'])
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
print(dic['4'])
KeyError: '4'
>>>
以上例子中可以看出,企圖訪問的鍵 '4' 在字典dic中不存在,引發(fā) KeyError 錯(cuò)誤,即訪問的鍵不存在。
我們可以使用 字典名[鍵名] 的方式來修改某一個(gè)鍵值對(duì)的值,也可以為字典新增鍵值對(duì)。
在實(shí)際操作中,如果鍵名在字典中存在,則修改其值,如果字典中不存在該鍵名,則執(zhí)行新增操作,如下例所示。
fruits = {1 : '蘋果', 2 : '梨', 3 : '荔枝'}
print('原字典:' , fruits)
fruits[4] = '西瓜'
print('更新后:', fruits)
fruits[3] = '葡萄'
print('再次更新后:', fruits)
執(zhí)行結(jié)果:
原字典: {1: '蘋果', 2: '梨', 3: '荔枝'}
更新后: {1: '蘋果', 2: '梨', 3: '荔枝', 4: '西瓜'}
再次更新后: {1: '蘋果', 2: '梨', 3: '葡萄', 4: '西瓜'}
在Python中可以使用del關(guān)鍵字刪除字典中的一個(gè)值或刪除字典的定義,也可以使用clear函數(shù)清空字典中的值。
>>> word = { 'a' : "apple", 'b' : ' banana', 'c' : 'cherry'}
>>> print(word)
{'a': 'apple', 'b': ' banana', 'c': 'cherry'}
>>> del word['b'] # 刪除一個(gè)值
>>> print(word)
{'a': 'apple', 'c': 'cherry'}
>>> word.clear() # 清空字典中的值
>>> print(word)
{}
>>> del word # 刪除 word 的定義
>>> print(word) # 將引發(fā) NameError錯(cuò)誤
raceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
print(word)
NameError: name 'word' is not defined
>>>
我們可以使用for循環(huán)迭代訪問或處理字典中的值。
1、使用items()方法返回字典的鍵-值對(duì)
word = { 'a' : "apple", 'b' : 'banana', 'c' : 'cherry'}
for k, v in word.items():
print(f'{k} = {v}')
輸出結(jié)果:
a = apple
b = banana
c = cherry
2、循環(huán)迭代字典中的鍵
word = { 'a' : "apple", 'b' : 'banana', 'c' : 'cherry'}
for k in word:
print(f'{k} = {word[k]}')
輸出結(jié)果:
a = apple
b = banana
c = cherry
3、使用values()方法循環(huán)迭代字典中的值
word = { 'a' : "apple", 'b' : 'banana', 'c' : 'cherry'}
for v in word.values():
print(v)
輸出結(jié)果:
apple
banana
cherry
可以使用 in 或 not in 檢測一個(gè)字典中是否存在某個(gè)鍵。
word = { 'a' : "apple", 'b' : 'banana', 'c' : 'cherry'}
print('c' in word)
print('d' not in word)
print('a' not in word)
輸出結(jié)果:
True
True
False
1、len()函數(shù)求字典中值的個(gè)數(shù)
>>> word = { 'a' : "apple", 'b' : 'banana', 'c' : 'cherry'}
>>> print(len(word))
3
>>>
2、values() 函數(shù)
該函數(shù)返回字典中“鍵-值”中的所有值,然后可以使用迭代對(duì)值進(jìn)行相關(guān)的處理。
nums = {'num1' : 12, 'num2' : 45, 'num3' : 9}
values = nums.values()
sum = 0
for v in values:
sum += v
print(f'sum = {sum}')
輸出結(jié)果:
sum = 66
3、items() 函數(shù)
items()函數(shù)可以獲取到字典中的所有鍵值對(duì),并可以使用循環(huán)迭代進(jìn)行處理。
見本文上面五、1中的例子。
4、pop(key[, default])函數(shù)
該函數(shù)從字典中刪除指定 key 項(xiàng),并返回其對(duì)應(yīng)的值,如果字典中不存在key鍵,則返回default指定的值,如果key不存在,且未指定default的話,該函數(shù)將引發(fā) KeyError 錯(cuò)誤。
nums = {'num1' : 12, 'num2' : 45, 'num3' : 9}
v1 = nums.pop('num1')
print(f'v1={v1},移除后nums = {nums}')
v2 = nums.pop('num1', 'NA')
print(f'v2={v2},nums={nums}')
輸出結(jié)果:
v1=12,移除后nums = {'num2': 45, 'num3': 9}
v2=NA,nums={'num2': 45, 'num3': 9}
5、dict.fromkeys(seq[, val])
該函數(shù)使用seq給出的序列值為鍵,創(chuàng)建一個(gè)字典,字典中每個(gè)鍵對(duì)應(yīng)的值由參數(shù)val給出,如果未提供 val 參數(shù),則默認(rèn)為 None.
dic1 = dict.fromkeys((1, 2, 3), 'a')
print(dic1)
dic2 = dict.fromkeys(['1', '2', '3'])
print(dic2)
dic3 = dict.fromkeys({'1', '2', '3'}, 'NA')
print(dic3)
輸出結(jié)果:
1: 'a', 2: 'a', 3: 'a'}
{'1': None, '2': None, '3': None}
{'3': 'NA', '1': 'NA', '2': 'NA'}
6、get(key[, default])
該函數(shù)將返回指定 key 所對(duì)應(yīng)的值,如果字典中不包含 key ,則返回可選參數(shù)default給定的值,如果字典中不含 key,且未給定default參數(shù)時(shí),函數(shù)直接返回None.
dic1 = {'a' : 'apple', 'b' : 'banana', 'c' : 'cherry', 'd' : 'durian'}
fr = dic1.get('a')
print(fr)
fr = dic1.get('e', 'NA')
print(fr)
fr = dic1.get('f')
print(fr)
運(yùn)行結(jié)果:
apple
NA
None
7、keys()
該函數(shù)返回字典中所有鍵的集合。
dic1 = {'a' : 'apple', 'b' : 'banana', 'c' : 'cherry', 'd' : 'durian'}
keys = dic1.keys()
print(keys)
for k in keys:
print(f'{k} : {dic1[k]}')
輸出結(jié)果:
dict_keys(['a', 'b', 'c', 'd'])
a : apple
b : banana
c : cherry
d : durian
8、popitem()
該函數(shù)每次執(zhí)行以元組的形式返回一個(gè)鍵值對(duì)的值,并將該值在原字典中移除。
dic1 = {'a' : 'apple', 'b' : 'banana', 'c' : 'cherry', 'd' : 'durian'}
while len(dic1) > 0:
item = dic1.popitem()
print(item)
輸出結(jié)果:
('d', 'durian')
('c', 'cherry')
('b', 'banana')
('a', 'apple')
9、setdefault(key[, default])
該函數(shù)用于向列表中增加一個(gè)值,增加值的鍵是函數(shù)參數(shù)指定的 key,如果指定了參數(shù)default,則新增項(xiàng)的值為default,否則為None,函數(shù)同時(shí)會(huì)返回該鍵值所對(duì)應(yīng)的值。如果原字典中已存在鍵為 key 的項(xiàng),則該函數(shù)僅返回該鍵值所對(duì)應(yīng)的值。
dic1 = {'a' : 'apple', 'b' : 'banana', 'c' : 'cherry'}
v = dic1.setdefault('p', 'pear')
print("dic1=", dic1, ",v=", v)
v = dic1.setdefault('g')
print("dic1=", dic1, ",v=", v)
v = dic1.setdefault('a')
print("dic1=", dic1, ",v=", v)
運(yùn)行結(jié)果:
dic1= {'a': 'apple', 'b': 'banana', 'c': 'cherry', 'p': 'pear'} ,v= pear
dic1= {'a': 'apple', 'b': 'banana', 'c': 'cherry', 'p': 'pear', 'g': None} ,v= None
dic1= {'a': 'apple', 'b': 'banana', 'c': 'cherry', 'p': 'pear', 'g': None} ,v= apple
10、update(dict)
該函數(shù)使用給定的字典參數(shù)dict來更新一個(gè)字典。如果原字典中存在dict中對(duì)應(yīng)的鍵,就使用dict中的值來修改它,否則就在原字典中新增一項(xiàng)。
dic1 = {'a' : 'apple', 'b' : 'banana', 'c' : 'cherry'}
print(dic1)
dic1.update({'a' : 'apricot', 'm' : 'mango'})
print(dic1)
輸出結(jié)果:
{'a': 'apple', 'b': 'banana', 'c': 'cherry'}
{'a': 'apricot', 'b': 'banana', 'c': 'cherry', 'm': 'mango'}
以上是關(guān)于Python字典中的所有內(nèi)容,如對(duì)內(nèi)容有疑問請(qǐng)留言評(píng)論。
新聞熱點(diǎn)
疑難解答
圖片精選