字典中的鍵使用時(shí)必須滿(mǎn)足一下兩個(gè)條件:
1、每個(gè)鍵只能對(duì)應(yīng)一個(gè)項(xiàng),也就是說(shuō),一鍵對(duì)應(yīng)多個(gè)值時(shí)不允許的(列表、元組和其他字典的容器對(duì)象除外)。當(dāng)有鍵發(fā)生沖突時(shí)(即字典鍵重復(fù)賦值),取最后的賦值。
2、鍵必須是可哈希的,像列表和字典這樣的可變類(lèi)型,由于他們是不可哈希的,所以不能作為字典的鍵。
為什么呢?―― 解釋器調(diào)用哈希函數(shù),根據(jù)字典中鍵的值來(lái)計(jì)算存儲(chǔ)你的數(shù)據(jù)的位置。如果鍵是可變對(duì)象,可以對(duì)鍵本身進(jìn)行修改,那么當(dāng)鍵發(fā)生變化時(shí),哈希函數(shù)會(huì)映射到不同的地址來(lái)存儲(chǔ)數(shù)據(jù),這樣哈希函數(shù)就不可能可靠地存儲(chǔ)或獲取相關(guān)的數(shù)據(jù); 選擇可哈希鍵的原因就是他們的值不能被改變。摘抄python 核心編程(第二版)的一個(gè)實(shí)例如下:
#!/usr/bin/env pythondb = {}def newuser(): prompt = 'login desired: ' while True: name = raw_input(prompt) if db.has_key(name): prompt = 'name taken, try another/n' continue else: break pwd = raw_input('passwd: ') db[name] = pwddef 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)uitEnter choice:""" done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except: choice = 'q' print '/nYou picked: [%s]' % choice if choice not in 'neq': print 'invalid option, try again' else: chosen = True if choice == 'q':done = True if choice == 'n':newuser() if choice == 'e':olduser()if __name__ == '__main__': showmenu()運(yùn)行結(jié)果:
[root@localhost src]# python usrpw.py (N)ew User Login(E)xisting User Login(Q)uitEnter choice:nYou picked: [n]login desired: rootpasswd: 1(N)ew User Login(E)xisting User Login(Q)uitEnter choice:nYou picked: [n]login desired: rootname taken, try another
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注