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