Python映射類型之dict詳解
映射類型 — dict
字典可用多種方式來創(chuàng)建:
- 使用花括號(hào)內(nèi)以逗號(hào)分隔鍵: 值對(duì)的方式: {‘jack’: 4098, ‘sjoerd’: 4127} or {4098:‘jack’, 4127: ‘sjoerd’}
- 使用字典推導(dǎo)式: {}, {x: x ** 2 for x in range(10)}
dict_a = {key: value for key in 'python' for value in range(2)}
list_phone = [('HUAWEI', '華為'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
- 使用類型構(gòu)造器: dict(), dict([(‘foo’, 100), (‘bar’, 200)]), dict(foo=100,bar=200)
字典所支持的操作:
list(d)
返回字典d 中使用的所有鍵的列表
len(d)
返回字典d 中的項(xiàng)數(shù)
d[key]
返回d 中以key 為鍵的項(xiàng)。如果映射中不存在key 則會(huì)引發(fā)KeyError。
如果字典的子類定義了方法__missing__() 并且key 不存在,則d[key] 操作將調(diào)用該方法并附帶鍵key 作為參數(shù)。d[key] 隨后將返回或引發(fā)__missing__(key) 調(diào)用所返回或引發(fā)的任何對(duì)象或異常。沒有其他操作或方法會(huì)發(fā)起調(diào)用__missing__()。如果未定義__missing__(),則會(huì)引發(fā)KeyError。missing() 必須是一個(gè)方法;它不能是一個(gè)實(shí)例變量:
>>> class Counter(dict): ... def __missing__(self, key): ... return 0 >>> c = Counter() >>> c['red'] 0 >>> c['red'] += 1 >>> c['red'] 1
上面的例子顯示了collections.Counter 實(shí)現(xiàn)的部分代碼。還有另一個(gè)不同的__missing__方法是由collections.defaultdict 所使用的。
d[key] = value
將d[key]設(shè)為value。
del d[key]
將d[key] 從d中移除。如果映射中不存在key 則會(huì)引發(fā)KeyError。
key in d
如果d中存在鍵key 則返回True,否則返回False。
iter(d)
返回以字典的鍵為元素的迭代器。這是iter(d.keys()) 的快捷方式。
clear()
移除字典中的所有元素。
copy()
返回原字典的淺拷貝
深copy
若你想徹底使2個(gè)dict完全獨(dú)立,無論有多少層數(shù)據(jù)。那就要用python工具包里的一個(gè)工具了
import copy
data = {
"name":"alex",
"age":18,
"scores":{
"語文":130,
"數(shù)學(xué)":60,
"英語":98,
}
}
d2 = data.copy()
d3 =copy.deepcopy(data)
d3["scores"]["語文"] = 149
print(d3)
print(data)
classmethod fromkeys(iterable[, value ]) fromkeys()
函數(shù)用于創(chuàng)建一個(gè)新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對(duì)應(yīng)的初始值
seq = ('Google', 'Runoob', 'Taobao')
thisdict = dict.fromkeys(seq)
print "新字典為 : %s" % str(dict)
thisdict = dict.fromkeys(seq, 10)
print "新字典為 : %s" % str(thisdict)
"""
新的字典為 : {'age': None, 'name': None, 'sex': None}
新的字典為 : {'age': 10, 'name': 10, 'sex': 10}
"""
get(key[, default ])
如果key 存在于字典中則返回key 的值,否則返回default。如果default 未給出則默認(rèn)為None,因而此方法絕不會(huì)引發(fā)KeyError。
items()
- 以列表返回視圖對(duì)象,是一個(gè)可遍歷的key/value對(duì)
dict.keys()、dict.values()和dict.items()返回的都是視圖對(duì)象( view objects),提供了字典實(shí)體的動(dòng)態(tài)視圖,這就意味著字典改變,視圖也會(huì)跟著變化
tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Value : %s" % tinydict.items()) # Value : dict_items([('Age', 7), ('Name', 'Runoob')])
keys()
返回由字典鍵組成的一個(gè)新視圖
dict.keys()、dict.values() 和 dict.items() 返回的都是視圖對(duì)象( view objects),提供了字典實(shí)體的動(dòng)態(tài)視圖,這就意味著字典改變,視圖也會(huì)跟著變化
a = {"a": 3, "b": 2}
print(a.keys()) # <class 'dict_keys'>
pop(key[, default ])
刪除字典給定鍵 key 所對(duì)應(yīng)的值,返回值為被刪除的值。
site= {'name': '菜鳥教程', 'alexa': 10000, 'url': 'www.runoob.com'}
element = site.pop('name')
print('刪除的元素為:', element)
print('字典為:', site)
"""
刪除的元素為: 菜鳥教程
字典為: {'alexa': 10000, 'url': 'www.runoob.com'}
"""
popitem()
- popitem() 方法隨機(jī)返回并刪除字典中的最后一對(duì)鍵和值。
- 如果字典已經(jīng)為空,卻調(diào)用了此方法,就報(bào)出KeyError異常。
- 返回一個(gè)鍵值對(duì)(key,value)形式,按照 LIFO(Last In First Out后進(jìn)先出法)順序規(guī)則,即最末尾的鍵值對(duì)。
site= {'name': '菜鳥教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)
print(site)
reversed(d)
返回一個(gè)逆序獲取字典鍵的迭代器。這是reversed(d.keys()) 的快捷方式
setdefault(key[, default ])
setdefault() 方法和 get()方法 類似, 如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為默認(rèn)值。
tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Age 鍵的值為 : %s" % tinydict.setdefault('Age', None))
print ("Sex 鍵的值為 : %s" % tinydict.setdefault('Sex', None))
print ("新字典為:", tinydict)
update([other ])
update() 函數(shù)把字典參數(shù) dict2 的 key/value(鍵/值) 對(duì)更新到字典 dict 里
tinydict = {'Name': 'Runoob', 'Age': 7}
tinydict2 = {'Sex': 'female' }
tinydict.update(tinydict2)
print ("更新字典 tinydict : ", tinydict)
values()
返回一個(gè)視圖對(duì)象,dict.keys()、dict.values() 和 dict.items() 返回的都是視圖對(duì)象( view objects),提供了字典實(shí)體的動(dòng)態(tài)視圖,這就意味著字典改變,視圖也會(huì)跟著變化
a = {"a": 3, "b": 2}
print(a.values()) # dict_values([3, 2])
d | other
合并d 和other 中的鍵和值來創(chuàng)建一個(gè)新的字典,兩者必須都是字典。當(dāng)d 和other 有相同鍵時(shí),other 的值優(yōu)先。3.9才支持
a = {"apple": 3, "banana": 4}b = {"grape": 5, "banana": 8}print(a | b)d |= other
- 用other 的鍵和值更新字典d ,other 可以是mapping 或iterable 的鍵值對(duì)。當(dāng)d 和other 有相同鍵時(shí),other 的值優(yōu)先。
- 3.9 新版功能
a = {"one": 1, "two": 2, "three": 3}
a |= {"three": 30, "four": 4, "five": 5}
print(a)
a = {"apple": 3, "banana": 4}
b = {"grape": 5, "banana": 8}
a |= b
print(a)
"""
{'one': 1, 'two': 2, 'three': 30, 'four': 4, 'five': 5}
{'apple': 3, 'banana': 8, 'grape': 5}
"""
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
pandas中的DataFrame數(shù)據(jù)遍歷解讀
這篇文章主要介紹了pandas中的DataFrame數(shù)據(jù)遍歷解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Vim及其用于Python的自動(dòng)補(bǔ)全功能
Vim是一款功能強(qiáng)大的文本編輯器,常被作為Python開發(fā)環(huán)境的首選,這篇文章主要介紹了用于?Python?的?Vim?自動(dòng)完成,需要的朋友可以參考下2023-09-09
django執(zhí)行數(shù)據(jù)庫查詢之后實(shí)現(xiàn)返回的結(jié)果集轉(zhuǎn)json
這篇文章主要介紹了django執(zhí)行數(shù)據(jù)庫查詢之后實(shí)現(xiàn)返回的結(jié)果集轉(zhuǎn)json,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python 數(shù)據(jù)分析之Beautiful Soup 提取頁面信息
Beautiful Soup 提供一些簡單的、python 式的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功能。它是一個(gè)工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因?yàn)楹唵?,所以不需要多少代碼就可以寫出一個(gè)完整的應(yīng)用程序2021-10-10
在Linux系統(tǒng)上安裝Python的Scrapy框架的教程
這篇文章主要介紹了在Linux系統(tǒng)上安裝Python的Scrapy框架的教程,Scrapy是著名的專門針對(duì)搜索引擎的爬蟲制作而研發(fā)的Python框架,需要的朋友可以參考下2015-06-06
pytorch 中pad函數(shù)toch.nn.functional.pad()的用法
今天小編就為大家分享一篇pytorch 中pad函數(shù)toch.nn.functional.pad()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01

