深入理解Python中字典的鍵的使用

2021-10-10 14:43:18 字數 4489 閱讀 2584

這篇文章主要介紹了深入理解python中字典的鍵的使用,是python入門學習中的基礎知識,需要的朋友可以參考下

字典的鍵

字典中的值沒有任何限制, 可以是任意python物件,即從標準物件到使用者自定義物件皆可,但是字典中的鍵是有型別限制的。

(1)不允許乙個鍵對應多個值

必須明確一條原則:每個鍵只能對應乙個項。也就是說:一鍵對應多個值是不允許的(像列表、元組和其他字典這樣的容器物件是可以的)。 當有鍵發生衝突(即字典鍵重複賦值),取最後(最近)的賦值。python並不會因字典中的鍵存在衝突而產生乙個錯誤,它不會檢查鍵的衝突是因為如果真這樣做的話,在每個鍵-值對賦值的時候都會做檢查,這將會占用一定量的記憶體。

>>> dict1=

>>> dict1

>>> dict1['foo']=123

>>> dict1

(2)鍵必須是可雜湊的

大多數python物件可以作為鍵,但它們必須是可雜湊的物件。像列表和字典這樣的可變型別,由於它們不是可雜湊的,所以不能作為鍵。

所有不可變的型別都是可雜湊的,因此它們都可以做為字典的鍵。要說明的是:值相等的數字表示相同的鍵,即整型數字1和浮點數1.0的雜湊值是相同的,它們是相同的鍵。

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

為什麼鍵必須是可雜湊的?直譯器呼叫雜湊函式,根據字典中鍵的值來計算儲存你的資料的位置。如果鍵是可變物件,它的值可改變。如果鍵發生變化,雜湊函式會對映到不同的位址來儲存資料。如果這樣的情況發生,雜湊函式就不可能可靠地儲存或獲取相關的資料。選擇可雜湊的鍵的原因就是因為它們的值不能改變。

數字和字串可以被用做字典的鍵,元組是不可變的但也可能不是一成不變的,因此用元組做有效的鍵必須要加限制:若元

組中只包括像數字和字串這樣的不可變引數,才可以作為字典中有效的鍵。

示例:# vi userpw.py

#!/usr/bin/env python

db={}

defnewuser():

prompt='please regist your name: '

whiletrue:

name=raw_input(prompt)

ifdb.has_key(name):

prompt='name taken,try another: '

continue

else:

break

pwd=raw_input('passswd: ')

db[name]=pwd

print'newuser [%s] has added successfully!'%name

defolduser():

name=raw_input('login: ')

pwd=raw_input('passwd: ')

passwd=db.get(name)

ifpasswd==pwd:

print'welcome back',name

else:

print'login incorrect!'

defshowmenu():

prompt="""

(n)ew user login

(e)xisting user login

(q)uit

enter choice: """

whiletrue:

try:

choice=raw_input(prompt).strip()[0].lower()

print'\nyou picked: [%s]'%choice

ifchoicenotin'neq':

print'invalid option,please try again'

ifchoice=='n':

newuser()

ifchoice=='e':

olduser()

ifchoice=='q':

break

except(eoferror,keyboardinterrupt):

print'invalid option,please try again'

if__name__=='__main__':

showmenu()

python深入 Python的深入理解

處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...

深入理解python中的None

在python中判斷乙個物件是否為空時,我曾經這樣寫 list iflist is not none print list is s list else print list is null 列印結果為 is 從上面的例子可以看出list為空應該列印的是 list is null 但是實際的結果不是...

Python的深入理解

處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...