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

歡迎訪問 生活随笔!

生活随笔

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

python

python唯一映射类型_Python基础:04映射类型

發布時間:2024/8/23 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python唯一映射类型_Python基础:04映射类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字典是Python語言中唯一的映射類型。一個字典對象是可變的,它是一個容器類型,能存儲任意個數的Python對象。字典中的數據是無序排列的。

映射類型也可被稱做哈希表,哈希表的算法是獲取鍵,對鍵執行一個叫做哈希函數的操作,并根據計算的結果,選擇在數據結構的某個地址中來存儲值。任何一個值存儲的地址皆取決于它的鍵。正因為這種隨意性,哈希表中的值是沒有順序的。哈希表一般有很好的性能,因為用鍵查詢相當快。

一:創建字典

1:dict()

從Python2.2版本起,可以用工廠方法 dict() 來創建字典。

如果不提供參數,會生成空字典。若參數是可以迭代的,如序列、迭代器,或是一個支持迭代的對象,那每個可迭代的元素必須成對出現。在每個值對中,第一個元素是字典的鍵、第二個元素是字典中的值。例子:

>>> fdict = dict((['x', 1], ['y', 2]))>>>fdict

{'y': 2, 'x': 1}>>> dict(zip(('x', 'y'), (1, 2)))

{'y': 2, 'x': 1}>>> dict([('xy'[i-1], i) for i in range(1,3)])

{'y': 2, 'x': 1}

如果輸入參數是(另)一個映射對象,比如,一個字典對象,對其調用dict()會從存在的字典里復制內容來生成新的字典。新生成的字典是原來字典對象的淺復制版本, 它與用字典的內建方法copy() 生成的字典對象是一樣的。但是copy()更快,所以推薦使用copy()。

從Python2.3 開始,dict()方法可以接受關鍵字參數字典:

>>> dict(x=1, y=2)

{'y': 2, 'x': 1}

2:fromkeys()

從Python2.3 版本起, 可以用內建方法fromkeys()來創建一個"默認"字典,字典中元素具有相同的值 (如果沒有給出, 默認為None):

>>> ddict = {}.fromkeys(('x', 'y'), -1)>>>ddict

{'y': -1, 'x': -1}>>> edict = {}.fromkeys(('foo', 'bar'))>>>edict

{'foo': None, 'bar':None}

二:訪問字典

從Python2.2 開始,可以不必再用keys()方法獲取供循環使用的鍵值列表了。 可以用迭代器來輕松地訪問類序列對象(sequence-like objects),比如字典和文件。只需要用字典的名字就可以在 for 循環里遍歷字典。

>>> dict2 = {'name': 'earth', 'port': 80}>>>> for key indict2:

...print 'key=%s, value=%s' %(key, dict2[key])

...

key=name, value=earth

key=port, value=80

要得到字典中某個元素的值, 可以用字典的鍵查找操作符([ ]):

>>> dict2['name']'earth'

使用[ ]時,如果在這個字典中沒有對應的鍵,將會產生一個錯誤:

>>> dict2['server']

Traceback (innermost last):

File"", line 1, in?

KeyError: server

檢查一個字典中是否有某個鍵,是用字典的 has_key()方法, 或者另一種比較好的方法就是從2.2 版本起用的,in 或 not in 操作符。

三:更新和刪除字典

1:更新

字典的鍵查找操作符([ ]),既可以用于從字典中取值,也可以用于給字典賦值。如果字典中該鍵已經存在,則字典中該鍵對應的值將被新值替代。如果改鍵不存在,則相當于增加新條目:

>>> dict2['name'] = 'venus' #更新已有條目

>>> dict2['arch'] = 'sunos5' #增加新條目

2:刪除

以下是刪除字典和字典元素的例子:

del dict2['name'] ??????????? # 刪除鍵為“name”的條目

dict2.clear() ??????????????????? # 刪除dict2 中所有的條目

del dict2 ????????????????????????? #刪除整個dict2 字典

dict2.pop('name') ?????????? #刪除并返回鍵為“name”的條目

四:字典的比較

字典的比較不是很有用也不常見。比較算法按照以下的順序:

(1)比較字典長度

如果字典的長度不同,那么用cmp(dict1, dict2) 比較大小時,如果字典 dict1 比 dict2 長,cmp()返回正值,如果 dict2 比 dict1 長,則返回負值。也就是說,字典中的鍵的個數越多,這個字典就越大。

(2)比較字典的鍵

如果兩個字典的長度相同,那就按字典的鍵比較;鍵比較的順序和 keys()方法返回鍵的順序相同。這時,如果兩個字典的鍵不匹配時,對這兩個(不匹配的鍵)直接進行比較。當dict1 中第一個不同的鍵大于dict2 中第一個不同的鍵,cmp()會返回正值。

(3)比較字典的值

如果兩個字典的長度相同而且它們的鍵也完全匹配,則用字典中每個相同的鍵所對應的值進行比較。一旦出現不匹配的值,就對這兩個值進行直接比較。若dict1 比dict2 中相同的鍵所對應的值大,cmp()會返回正值。

(4) 完全匹配

到此為止,每個字典有相同的長度、相同的鍵、每個鍵也對應相同的值,則字典完全匹配,cmp函數返回0 值。

五:字典的鍵

大多數Python對象都可以作為鍵;但它們必須是可哈希的對象。所有不可變的類型都是可哈希的,因此它們都可以做為字典的鍵。像列表和字典這樣的可變類型,由于它們不是可哈希的,所以不能作為鍵。

在執行中字典中的鍵不允許被改變。比如創建了一個字典,字典中包含一個元素(一個鍵和一個值)。可能是由于某個變量的改變導致鍵發生了改變。這時候你如果用原來的鍵來取出字典里的數據,會得到KeyError。現在你沒辦法從字典中獲取該值了,因為鍵本身的值發生了變化。由于上面的原因,字典中的鍵必須是可哈希的, 所以數字和字符串可以作為字典中的鍵, 但是列表和其他字典不行。

一個要說明的是問題是數字:值相等的數字表示相同的鍵。換句話來說,整型數字 1 和 浮點數 1.0 的哈希值是相同的,即它們是相同的鍵。

也有一些可變對象(很少)是可哈希的,它們可以做字典的鍵,但很少見。舉一個例子,一個實現了__hash__() 特殊方法的類。因為__hash__()方法返回一個整數,所以仍然是用不可變的值(做字典的鍵)。

數字和字符串可以被用做字典的鍵,元組雖然是不可變的,但是元組也有可能包含可變對象。所以用元組做有效的鍵,必須要加限制:元組中只包括像數字和字符串這樣的不可變參數,才可以作為字典中有效的鍵。

六:映射類型相關函數

內建函數hash()可以判斷某個對象是否可以做一個字典的鍵。將一個對象作為參數傳遞給 hash(), 會返回這個對象的哈希值。 只有這個對象是可哈希的,才可作為字典的鍵 (函數的返回值是整數,不產生錯誤或異常)。

如果非可哈希類型作為參數傳遞給hash()方法,會產生TypeError 錯誤(因此,如果使用這樣的對象作為鍵給字典賦值時會出錯):

>>>hash([])

Traceback (innermost last): File"", line 1, in?

TypeError: list objects are unhashable>>>

>>> dict2[{}] = 'foo'Traceback (most recent call last): File"", line 1, in?

TypeError: dict objects are unhashable

七:映射類型內建方法

1:keys()方法,返回一個列表,包含字典中所有的鍵(的副本)。

2:values()方法,返回一個列表,包含字典中所有的值(的副本)。

3:items(),返回一個包含所有(鍵, 值)元組(的副本)的列表。這些方法在不按任何順序遍歷字典的鍵或值時很有用。

>>>dict2.keys()

['port', 'name']>>>dict2.values()

[80, 'earth']>>>dict2.items()

[('port', 80), ('name', 'earth')]

4:dict.get(key, default=None)

對字典dict中的鍵key,返回它對應的值value,如果字典中不存在此鍵,則返回default的值,參數default的默認值為None,所以該函數不會引發KeyError異常。該函數也不會改變字典。

5:dict.pop(key [, default])

如果字典中key鍵存在,刪除并返回dict[key],如果key 鍵不存在,但是給出了default參數,則返回default。如果沒有給出default且key不存在,則引發KeyError 異常。該函數有可能改變字典。

6:update()方法可以用來將一個字典的內容添加到另外一個字典中。字典中原有的鍵如果與新添加的鍵重復,那么重復鍵所對應的原有條目的值將被新鍵所對應的值所覆蓋。原來不存在的條目則被添加到字典中。

7:clear()方法可以用來刪除字典中的所有的條目。

>>> dict2= {'host':'earth', 'port':80}>>> dict3= {'host':'venus', 'server':'http'}>>>dict2.update(dict3)>>>dict2

{'server': 'http', 'port': 80, 'host': 'venus'}>>>dict3.clear()>>>dict3

{}

8:copy()方法返回一個字典的副本。注意這只是淺復制。

9:setdefault(key [,default])是自2.0才有的內建方法, 使得代碼更加簡潔。它實現了常用的語法:如果字典中key存在,則不改變字典,直接返回它的值。如果所找的key在字典中不存在,則給這個鍵賦default并返回default,default默認為None。

>>> myDict = {'host': 'earth', 'port': 80}>>> myDict.setdefault('port', 8080)80

>>> myDict.setdefault('prot', 'tcp')'tcp'

>>>myDict.items()

[('prot', 'tcp'), ('host', 'earth'), ('port', 80)]

10:因keys(),items(), 和 values()方法的返回值都是列表。數據集如果很大會導致很難處理,因此iteritems(), iterkeys(), 和itervalues() 方法被添加到 Python2.2 中。這些函數與返回列表的對應方法相似,只是它們返回惰性賦值的迭代器,所以節省內存。

八:其他

要避免使用內建對象名字作為變量的標識符。不要用 dict, list, file, bool, str, input, len 這樣的內建類型為變量命名。

>>> print 'host %(name)s is runningon port %(port)d' %dict2

host venusis running on port 6969

上面的print語句展示了另一種使用字符串格式符( %)的方法。用字典參數可以簡化print 語句,因為這樣做你只須用到一次該字典的名字,而不用在每個元素出現的時候都用元組參數表示。

總結

以上是生活随笔為你收集整理的python唯一映射类型_Python基础:04映射类型的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品视频入口 | 一级全黄裸体免费视频 | 亚洲最大福利网站 | 一级片美女 | 91插插插影库永久免费 | 一色道久久88加勒比一 | 伊人黄色| 中文字幕一区二区三区在线播放 | 深夜视频一区二区 | 久久av免费观看 | 超碰免费97| 国产精品无码av在线播放 | 日日爽视频 | 91视频在线视频 | 蜜臀久久99精品久久久久久 | 免费成人福利视频 | 色人阁网站 | 久久久精品小视频 | 91欧美视频 | 婷婷六月色 | 狠狠爱欧美 | 成年人午夜视频 | 亚洲一区二区三区久久 | 国产视频99| 中文字幕av久久爽一区 | 久久影视网 | 黄色网址你懂的 | 久艹伊人| 自拍偷拍亚洲视频 | 欧美性狂猛xxxxxbbbbb | 久久爰| 欧美成人专区 | 人妻偷人精品一区二区三区 | jizz欧美大全| 午夜成人鲁丝片午夜精品 | 一区二区美女视频 | 国产在线精品福利 | 国产剧情一区二区三区 | 鲁鲁在线 | 麻豆tube | 蘑菇视频黄色 | 国产女人叫床高潮大片免费 | 男女床上拍拍拍 | 国产成人在线免费视频 | 黑森林福利视频导航 | 国产福利小视频 | 日本在线三级 | 自拍偷拍亚洲精品 | 国产激情精品一区二区三区 | 少女忠诚电影高清免费 | 五月天激情综合网 | 欧美亚日韩 | 免费成人电影在线观看 | 精品黄网 | 亚洲综合精品一区 | 一本一道av| 99视频免费观看 | 欧美另类z0zx974| 波多野结衣亚洲一区 | 日韩久久久久 | caoporn超碰97 | 成人小视频在线看 | 五月综合久久 | 精品一区二区电影 | av免费亚洲| 九九黄色片 | 欧美久久久影院 | 国产精品99在线观看 | 亚洲最黄网站 | 久久精品一二三区 | 国产一区二区三区免费在线观看 | 日韩午夜影院 | 亚洲蜜臀av | 蜜桃成人在线 | 久久精品久久久久久 | 18性xxxxx性猛交 | 久久久久人| 豆花免费跳转入口官网 | 黄色国产视频 | 亚洲天堂网址 | 亚洲第一视频网 | 黄色一级生活片 | 欧美日韩精品一区二区三区视频播放 | 伊人99在线 | 2024男人天堂| 色婷婷综合在线 | 成人精品视频99在线观看免费 | 国内成人自拍视频 | 超碰c| 黄色三级片毛片 | 青青草污视频 | 亚洲另类xxxx| 亚洲AV无码国产成人久久 | 成人中文字幕+乱码+中文字幕 | 精品视频导航 | 熟女人妻在线视频 | 日本少妇xxxx | 成人免费黄色 | 狠狠伊人|