字典中的鍵使用時必須滿足一下兩個條件:
1、每個鍵只能對應一個項,也就是說,一鍵對應多個值時不允許的(列表、元組和其他字典的容器對象除外)。當有鍵發生沖突時(即字典鍵重復賦值),取最后的賦值。
Traceback (most recent call last):
? File "
NameError: name 'Chengdu' is not defined
>>> myuniversity_dict = {'name':'yuanyuan', 'age':18, 'age':19, 'age':20, 'schoolname':'Chengdu', 'schoolname':'Xinxiang'}
>>> myuniversity_dict
{'age': 20, 'name': 'yuanyuan', 'schoolname': 'Xinxiang'}
>>>
2、鍵必須是可哈希的,像列表和字典這樣的可變類型,由于他們是不可哈希的,所以不能作為字典的鍵。
為什么呢?―― 解釋器調用哈希函數,根據字典中鍵的值來計算存儲你的數據的位置。如果鍵是可變對象,可以對鍵本身進行修改,那么當鍵發生變化時,哈希函數會映射到不同的地址來存儲數據,這樣哈希函數就不可能可靠地存儲或獲取相關的數據; 選擇可哈希鍵的原因就是他們的值不能被改變。摘抄python 核心編程(第二版)的一個實例如下:
#!/usr/bin/env python db = {} 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] = pwd 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:""" 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()
運行結果:
[root@localhost src]# python usrpw.py (N)ew User Login (E)xisting User Login (Q)uit Enter choice:n You picked: [n] login desired: root passwd: 1 (N)ew User Login (E)xisting User Login (Q)uit Enter choice:n You picked: [n] login desired: root name taken, try another
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
