搜尋
首頁後端開發Python教學python映射類型的相關介紹

python映射類型的相關介紹

Jun 14, 2019 pm 02:01 PM
dictpython對應

映射類型是一類可迭代的鍵-值資料項的組合,提供了存取資料項及其鍵和值的方法,在python3中,支援兩種無序的映射類型:內建的dict和標準庫中的collections.defaultdict類型。

在python3.1後,也引入了有序的映射類型:collections.OrderedDict.

相關推薦:《python影片

python映射類型的相關介紹

特點:

1.只有可哈希運算的物件可用於映射類型中的鍵,因此,內建的固定的資料類型都可以用作映射類型中的鍵(內建固定的類型都可進行哈希運算),目前接觸到的固定資料類型有:int、float、complex、bool、str、tuple、frozenset;

#2.每個鍵相關聯的值可以是任意物件;

3.映射類型也是可迭代的(iterable)。

4.映射類型可以使用比較運算子進行比較,可以使用成員關係符in/not in和內建len()函數。

1.dict(字典)

#dict資料類型是一種無序的、可變的組合資料類型,其中包含0 -n個鍵值對,鍵是指向可雜湊運算的物件的引用,值可以指向任意物件的引用。由於鍵是可哈希運算的物件引用,因此保證了鍵的唯一性;由於dict是可變的,因此可以對dict進行資料項的新增和移除操作;由於dict是無序的,因此沒有索引,也不能使用分片運算子來操作。

字典的建立

1.dict()可以作為一個函數調用,此時建立一個空dict:

>>> dict()
{}
>>>

dict()中傳入一個映射類型的參數時,將傳回以該參數為基礎的字典,如:

>>> d1 = {"key1":"value1","key2":"value2"}
>>> dict(d1)
{'key1': 'value1', 'key2': 'value2'}
>>>

dict() 也可以接受序列類型的參數,但是前提是序列中的每一個資料項本身是一個包含兩個物件的序列,第一個用作鍵,第二個用作值,如:

>>> d1 = dict((("k1","v1"),("k2","v2")))   #使用元组创建
>>> d1
{'k1': 'v1', 'k2': 'v2'}
>>> 
>>> d1 = dict([("k1","v1"),("k2","v2")])   #使用序列创建
>>> d1
{'k1': 'v1', 'k2': 'v2'}
>>>

dict() 中還可以關鍵字參數進行創建,其中鍵作為關鍵字,值作為關鍵字的值,如:

>>> dict(id=1,name="zhangsan",age=23)
{'id': 1, 'name': 'zhangsan', 'age': 23}
>>>

注意:關鍵字必須為有效的python標識符

2.使用花括號建立dict,空{}會建立一個空的dict ,非空dict由多個項目組成,每一項由逗號分隔,其中每一項都使用K:V 的形式創建,如:

>>> dict2 = {"name":"kobe","age":33,"num":24}
>>> dict2
{'name': 'kobe', 'age': 33, 'num': 24}
>>>

3.使用字典內涵創建字典

defaultdict是dict的子類,它支援dict的所有的操作和方法。和dict的不同之處在於,如果dict中不包含某一個鍵,則透過dict[x]取值時出現KeyError異常,但是如果是defaultdict,則會建立一個新的項,鍵為該鍵,值為預設值.

2.collections.defaultdict(預設字典)

#建立collections.defaultdict

#創建collections.defaultdict時,透過collections.defaultdict(),根據參數可以有兩種方式進行建立:

* 1.使用參數類型來建立:

>>> import collections
>>> cd1 = collections.defaultdict(int)
>>> cd2 = collections.defaultdict(list)
>>> cd3 = collections.defaultdict(str)
>>> cd1["x"]
0
>>> cd2["x"]
[]
>>> cd3["x"]
''
>>>

這裡分別使用了int、 list、str,他們的預設值分別為0,[],”

* 2.使用函數名稱來建立:

>>> def name():
    return 'zhangsan'
>>> cd4 = collections.defaultdict(name)
>>> cd4["x"]
'zhangsan'
>>>

透過這種方式,可以讓預設字典的預設值更有彈性。 

需要注意的是,collections.defaultdict()可以不傳入參數或傳入None,但是如果這樣,則不支援預設值,例如:

>>> cd5 = collections.defaultdict()
>>> cd5["x"]
Traceback (most recent call last):
  File "<pyshell#254>", line 1, in <module>
    cd5["x"]
KeyError: &#39;x&#39;
>>>

有了collections.defaultdict,可以代替dict中的get(k,v)和setdefault()方法了。

##3.collections.OrderedDict


######## #OrderedDict是dict子類,支援dict所有方法,記住了插入key的順序。如果新條目覆蓋現有條目,則原始插入位置保持不變。刪除條目並重新插入它將使其移至最後。 # ##
class collections.OrderedDict([items])
###因為是有順序的,所以只有當順序也相同的時候,兩個OrderedDict才相同。但是當OrderedDict和普通dict相比較時,會忽略順序。######
from collections import OrderedDict
d = {&#39;banana&#39;: 3, &#39;apple&#39;: 4}
od1 = OrderedDict({&#39;banana&#39;: 3, &#39;apple&#39;: 4})
od2 = OrderedDict({&#39;apple&#39;: 4, &#39;banana&#39;: 3})
print(od1 == od2)
print(od1 == d)
###運行結果###
FalseTrue
###3. 關鍵方法###
OrderedDict.popitem(last=True)
###普通dict的該方法不接受參數,只能將最後一個條目刪除;OrderedDict比dict更為靈活,接受一個last參數:當last=True時和普通方法一樣,符合LIFO順序;當last=False時候,刪除第一個元素,符合FIFO順序。###
from collections import OrderedDict
od1 = OrderedDict({&#39;banana&#39;: 3, &#39;apple&#39;: 4})
od1.popitem(False)
print(od1)
###運行結果###
OrderedDict([(&#39;apple&#39;, 4)])
###4. 簡單增強# #####OrderedDict只是保持了插入的順序,當條目被修改時,順序不會修改。###
od1 = OrderedDict({&#39;banana&#39;: 3, &#39;apple&#39;: 4})
od1[&#39;banana&#39;] = 5print(od1)
###運行結果###
OrderedDict([(&#39;banana&#39;, 5), (&#39;apple&#39;, 4)])
###但是有時我們需要修改和插入時同樣的效果,可以簡單的增強一下,重寫__setitem__()方法當修改時先刪除該元素然後再插入。###
class EnhancedOrderedDict(OrderedDict):
    def __setitem__(self, key, value):        
        if key in self:
           del self[key]
       OrderedDict.__setitem__(self, key, value)
###測試###
eod = EnhancedOrderedDict({&#39;banana&#39;: 3, &#39;apple&#39;: 4})print(eod)
eod[&#39;banana&#39;] = 5print(eod)
###運行結果###
EnhancedOrderedDict([(&#39;banana&#39;, 3), (&#39;apple&#39;, 4)])
EnhancedOrderedDict([(&#39;apple&#39;, 4), (&#39;banana&#39;, 5)])

以上是python映射類型的相關介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python中的合併列表:選擇正確的方法Python中的合併列表:選擇正確的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入兩個列表?如何在Python 3中加入兩個列表?May 14, 2025 am 12:09 AM

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

Python串聯列表字符串Python串聯列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

Python執行,那是什麼?Python執行,那是什麼?May 14, 2025 am 12:06 AM

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python:關鍵功能是什麼Python:關鍵功能是什麼May 14, 2025 am 12:02 AM

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python:編譯器還是解釋器?Python:編譯器還是解釋器?May 13, 2025 am 12:10 AM

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

python用於循環與循環時:何時使用哪個?python用於循環與循環時:何時使用哪個?May 13, 2025 am 12:07 AM

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

Python循環:最常見的錯誤Python循環:最常見的錯誤May 13, 2025 am 12:07 AM

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能