python中的字典使用分享
字典中的键使用时必须满足一下两个条件:
1、每个键只能对应一个项,也就是说,一键对应多个值时不允许的(列表、元组和其他字典的容器对象除外)。当有键发生冲突时(即字典键重复赋值),取最后的赋值。
>>>myuniversity_dict={'name':'yuanyuan','age':18,'age':19,'age':20,'schoolname':Chengdu,'schoolname':Xinxiang} Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> NameError:name'Chengdu'isnotdefined >>>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/envpython db={} defnewuser(): prompt='logindesired:' whileTrue: name=raw_input(prompt) ifdb.has_key(name): prompt='nametaken,tryanother\n' continue else: break pwd=raw_input('passwd:') db[name]=pwd defolduser(): name=raw_input('login:') pwd=raw_input('passwd:') passwd=db.get(name) ifpasswd==pwd: print'welcomeback',name else: print'loginincorrect' defshowmenu(): prompt=""" (N)ewUserLogin (E)xistingUserLogin (Q)uit Enterchoice:""" done=False whilenotdone: chosen=False whilenotchosen: try: choice=raw_input(prompt).strip()[0].lower() except: choice='q' print'\nYoupicked:[%s]'%choice ifchoicenotin'neq': print'invalidoption,tryagain' else: chosen=True ifchoice=='q':done=True ifchoice=='n':newuser() ifchoice=='e':olduser() if__name__=='__main__': showmenu()
运行结果:
[root@localhostsrc]#pythonusrpw.py (N)ewUserLogin (E)xistingUserLogin (Q)uit Enterchoice:n Youpicked:[n] logindesired:root passwd:1 (N)ewUserLogin (E)xistingUserLogin (Q)uit Enterchoice:n Youpicked:[n] logindesired:root nametaken,tryanother