Python字典dict
字典是許多數據的集合,屬于可變序列類型,它是無序的可變序列,其保存的內容是以“鍵值對”的形式存放的。
Python 中,字典的數據類型為 dict,通過 type() 函數即可查看。
字典類型所具有的主要特征:
(1)通過鍵而不是通過索引來讀取元素。
(2)字典是任意數據類型的無序集合。
(3)字典是可變的,并且可以任意嵌套。
(4)字典中的鍵必須唯一。
(5)字典中的鍵必須不可變,因此只能使用數字、字符串或者元組,不能使用列表。
======創建字典======
1.賦值創建
Python 字典類型的語法格式如下:
dictname = {'key':'value1','key2':'value2',...,'keyn':valuen}
其中 dictname 表示字典類型名,keyn : valuen 表示各個元素的鍵值對。需要注意的是,同一字典中各個元素的鍵值必須唯一。
示例:
adict = {'a':1,'b':2,'c':3}
print(adict)
bdict = {}
print(bdict)
cdict = {(1,2):'good','bad':[1,2]}
print(cdict)
結果:
{'a': 1, 'b': 2, 'c': 3}
{}
{(1, 2): 'good', 'bad': [1, 2]}
2.通過fromkeys()方法創建
Python 中,還可以使用 dict 字典類型提供的 fromkeys() 方法創建所有鍵值為空的字典,使用此方法的語法格式為:
dictname = dict.fromkeys(list,value=None)
其中,list 參數表示字典中所有鍵的列表,value 參數默認為 None,表示所有鍵對應的值。此種創建方式,通常用于初始化字典,設置 value 的默認值。
示例:
ddict = {"a":1,'b':2}
edict = dict.fromkeys(ddict)
print(edict)
結果:
{'a': None, 'b': None}
?
3.通過dict()映射函數創建
fdict = dict(a=1,b=2,c=3)? ? ? #使用此方式創建字典時,字符串不能帶引號
print(fdict)
gdict = [['a',1],['b',2]]? ? #向 dict() 函數傳入列表或元組,其中元素是包含 2 個元素的列表或元組,其中第一個為鍵,第二個為值。
print(dict(gdict))
hdict =[(1,2),(3,4),(5,6)]
print(dict(hdict))
idict =((1,2),(3,4),(5,6))
print(dict(idict))
jdict =([1,2],[3,4],[5,6])
print(dict(jdict))
akeys = ['a','b','c']? ?#通過dict() 函數和 zip() 函數可將前兩個列表轉換為對應的字典。akeys和avalues還可以是字符串或元組
avalues = [1,2,3]
print(dict(zip(akeys,avalues)))
結果:
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2}
{1: 2, 3: 4, 5: 6}
{1: 2, 3: 4, 5: 6}
{1: 2, 3: 4, 5: 6}
{'a': 1, 'b': 2, 'c': 3}
注意,無論采用以上哪種方式創建字典,字典中各元素的鍵都只能是字符串、元組或數字,不能是列表。
====訪問字典=====
1.通過鍵來訪問
akeys = ['a','b','c']
avalues = [1,2,3]
adict = dict(zip(akeys,avalues))
print(adict['c'])
結果:
3
2.通過get() 方法獲取指定鍵的值
get() 方法的語法格式為:
dict.get(key[,default])
其中,dict 指的是所創建的字典名稱;key 表示指定的鍵;default 用于指定要查詢的鍵不存在時,此方法返回的默認值,如果不手動指定,會返回 None。
示例:
adict = dict(a=1,b=2,c=3)
print(adict.get('a'))
print(adict.get('d'))? ?#指定的鍵不存在,會返回None
print(adict.get('e','No this key'))? ?#指定的鍵不存在,但會返回一個提示信息
結果:
1
None
No this key
=====刪除字典=====
和刪除列表、元組一樣,手動刪除字典也可以使用 del 語句。
adict = dict(a=1,b=2,c=3)
del(adict)
print(adict)
結果:
NameError: name 'adict' is not defined
====添加鍵值對====
如果要為 dict 添加鍵值對,只需為不存在的 key 賦值即可。實現此操作的語法格式如下:
dictname[key] = value
示例 :
adict = {}
adict['a'] = 1
adict['b'] = 2
adict['c'] = 3
print(adict)
結果:
{'a': 1, 'b': 2, 'c': 3}
=====修改鍵值對========
“修改鍵值對”并不是同時修改某一鍵值對的鍵和值,而只是修改某一鍵值對中的值。
由于在字典中,各元素的鍵必須是唯一的,因此,如果新添加元素的鍵與已存在元素的鍵相同,原來鍵所對應的值就會被新的值替換掉。例如:
adict = dict(a=1,b=2,c=3)
adict['a'] = 111
print(adict)
結果:
{'a': 111, 'b': 2, 'c': 3}
====刪除鍵值對======
如果要刪除字典中的鍵值對,還是可以使用 del 語句。例如:
adict = dict(a=1,b=2,c=3)
del adict['c']
print(adict)
結果:
{'a': 1, 'b': 2}
====判斷鍵值對是否存在======
如果要判斷字典中是否存在指定鍵值對,首先應判斷字典中是否有對應的鍵。判斷字典是否包含指定鍵值對的鍵,可以使用 in 或 not in 運算符。對于 dict 而言,in 或 not in 運算符都是基于 key 來判斷的。
adict = dict(a=1,b=2,c=3)
print('a' in adict)
print('a' not in adict)
結果:
True
False
====鍵值對操作方法======
1.keys()、values() 和 items()方法
這 3 個方法之所以放在一起介紹,是因為它們都用來獲取字典中的特定數據。keys() 方法用于返回字典中的所有鍵;values() 方法用于返回字典中所有鍵對應的值;items() 用于返回字典中所有的鍵值對。
adict = dict(a=1,b=2,c=3)
print(adict.keys())
print(adict.values())
print(adict.items())
結果:
dict_keys(['a', 'b', 'c'])
dict_values([1, 2, 3])
dict_items([('a', 1), ('b', 2), ('c', 3)])
注意:在 Python 2.x 中,這三個方法的返回值是列表類型。但在 Python 3 中,并不是列表和元組類型,因為 Python 3不希望用戶直接操作這幾個方法的返回值。如果想使用返回的數據,有以下 2 種方法:
(1)使用 list() 函數,將它們返回的數據轉換成列表,例如:
adict = dict(a=1,b=2,c=3)
print(list(adict.keys()))
print(list(adict.values()))
print(list(adict.items()))
結果:
['a', 'b', 'c']
[1, 2, 3]
[('a', 1), ('b', 2), ('c', 3)]
(2)利用多重賦值的技巧,利用循環結構將鍵或值分別賦給不同的變量,例如:
adict = dict(a=1,b=2,c=3)
for i in adict.keys():
? ? print(i,end= ' ')
print()
for j in adict.values():
? ? print(j,end=' ')
print()
for k,v in adict.items():
? ? print("key:%s"% k,"value:%s"% v)
結果:
a b c?
1 2 3?
key:a value:1
key:b value:2
key:c value:3
2.copy()方法
copy() 方法用于返回一個具有相同鍵值對的新字典,例如:
adict = dict(a=1,b=2,c=3)
cdict = adict.copy()
print(cdict)
結果:
{'a': 1, 'b': 2, 'c': 3}
注意,copy() 方法所遵循的拷貝原理,既有深拷貝,也有淺拷貝。拿拷貝字典 a 為例,copy() 方法只會對最表層的鍵值對進行深拷貝,也就是說,它會再申請一塊內存用來存放 {'one': 1, 'two': 2, 'three': []};而對于某些列表類型的值來說,此方法對其做的是淺拷貝,也就是說,b 中的 [1,2,3] 的值不是自己獨有,而是和 a 共有。
a = {'a':1,'b':2,'c':[1,2,3]}
b = a.copy()
a['a'] = 111
print(a)
print(b)
a['d'] = 4
print(a)
print(b)
a['c'].remove(1)
print(a)
print(b)
結果:
{'a': 111, 'b': 2, 'c': [1, 2, 3]}
{'a': 1, 'b': 2, 'c': [1, 2, 3]}
{'a': 111, 'b': 2, 'c': [1, 2, 3], 'd': 4}
{'a': 1, 'b': 2, 'c': [1, 2, 3]}
{'a': 111, 'b': 2, 'c': [2, 3], 'd': 4}
{'a': 1, 'b': 2, 'c': [2, 3]}
從運行結果不難看出,對 a 增加新鍵值對,b 不變;而修改 a 某鍵值對中列表內的元素,b也會相應改變。
3.update()方法
在執行 update() 方法時,如果被更新的字典中己包含對應的鍵值對,那么原 value 會被覆蓋;如果被更新的字典中不包含對應的鍵值對,則該鍵值對被添加進去。
a = {'a':1,'b':2,'c':[1,2,3]}
a.update({'a':111,'b':222,'e':444})
print(a)
結果:
{'a': 111, 'b': 222, 'c': [1, 2, 3], 'e': 444}
4.pop()方法
pop() 方法用于獲取指定 key 對應的 value,并刪除這個鍵值對。
a = {'a':1,'b':2,'c':[1,2,3]}
a.pop('a')
print(a)
結果:
{'b': 222, 'c': [1, 2, 3]}
5.popitem()方法
popitem() 方法用于隨機彈出字典中的一個鍵值對。
注意,此處的隨機其實是假的,它和 list.pop() 方法一樣,也是彈出字典中最后一個鍵值對。但由于字典存儲鍵值對的順序是不可知的,因此 popitem() 方法總是彈出底層存儲的最后一個鍵值對。
a = {'a':1,'b':2,'c':[1,2,3]}
print(a)
k,v = a.popitem()? ?#將彈出項的key賦值給k、value賦值給v
print(k,v)
結果:
{'a': 1, 'b': 2, 'c': [1, 2, 3]}
c [1, 2, 3]
6.setdefault()方法
setdefault() 方法總能返回指定 key 對應的 value;如果該鍵值對存在,則直接返回該 key 對應的 value;如果該鍵值對不存在,則先為該 key 設置默認的 value,然后再返回該 key 對應的 value。
a = {'a':1,'b':2,'c':[1,2,3]}
print(a)
print(a.setdefault('a',444))? #鍵存在,則不會修改value
print(a.setdefault('e',444))? #鍵不存在,則新增鍵值對
print(a)
結果:
{'a': 1, 'b': 2, 'c': [1, 2, 3]}
1
444
{'a': 1, 'b': 2, 'c': [1, 2, 3], 'e': 444}
====使用字典格式化字符串=======
temp = 'name:%(name)s,price:%(price)d,'
book = {'name':'python','price':120}
print(temp % book)
結果:
name:python,price:120
?
總結
以上是生活随笔為你收集整理的Python字典dict的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位archlinux运行steam
- 下一篇: websocket python爬虫_p