這篇文章主要介紹了深入理解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
=
{}
def
newuser():
prompt
=
'please regist your name: '
while
true
:
name
=
raw_input
(prompt)
if
db.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
def
olduser():
name
=
raw_input
(
'login: '
)
pwd
=
raw_input
(
'passwd: '
)
passwd
=
db.get(name)
if
passwd
=
=
pwd:
print
'welcome back'
,name
else
:
print
'login incorrect!'
def
showmenu():
prompt
=
"""
(n)ew user login
(e)xisting user login
(q)uit
enter choice: """
while
true
:
try
:
choice
=
raw_input
(prompt).strip()[
0
].lower()
print
'\nyou picked: [%s]'
%
choice
if
choice
not
in
'neq'
:
print
'invalid option,please try again'
if
choice
=
=
'n'
:
newuser()
if
choice
=
=
'e'
:
olduser()
if
choice
=
=
'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,這樣你就可以在保證程式能夠在任何的計算...