日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 映射和反映射_python映射类型的相关介绍

發布時間:2023/12/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 映射和反映射_python映射类型的相关介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

在python3.1后,還引入了一種有序的映射類型:collections.OrderedDict.

相關推薦:《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 "", line 1, in cd5["x"]KeyError: 'x'>>>

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

3.collections.OrderedDict

OrderedDict是dict子類,支持dict所有方法,記住了插入key的順序。如果新條目覆蓋現有條目,則原始插入位置保持不變。 刪除條目并重新插入它將使其移至最后。class collections.OrderedDict([items])

因為是有序的,所以只有當順序也相同的時候,兩個OrderedDict才相同。但是OrderedDict和普通dict相比較時,會忽略順序。from collections import OrderedDictd = {'banana': 3, 'apple': 4}od1 = OrderedDict({'banana': 3, 'apple': 4})od2 = OrderedDict({'apple': 4, 'banana': 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 OrderedDictod1 = OrderedDict({'banana': 3, 'apple': 4})od1.popitem(False)print(od1)

運行結果OrderedDict([('apple', 4)])

4. 簡單增強

OrderedDict只是保持了插入的順序,當條目被修改時,順序不會修改。od1 = OrderedDict({'banana': 3, 'apple': 4})od1['banana'] = 5print(od1)

運行結果OrderedDict([('banana', 5), ('apple', 4)])

但是有時候我們需要修改和插入時同樣的效果,可以簡單的增強一下,重寫__setitem__()方法當修改時先刪除該元素然后再插入。class EnhancedOrderedDict(OrderedDict): def __setitem__(self, key, value): if key in self: del self[key] OrderedDict.__setitem__(self, key, value)

測試eod = EnhancedOrderedDict({'banana': 3, 'apple': 4})print(eod)eod['banana'] = 5print(eod)

運行結果EnhancedOrderedDict([('banana', 3), ('apple', 4)])EnhancedOrderedDict([('apple', 4), ('banana', 5)])

總結

以上是生活随笔為你收集整理的python 映射和反映射_python映射类型的相关介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。