-->

python 课堂笔记 day_02 - 字典的使用

#coding: utf-8
"""""""""
#字典:当索引不好用时.....
#以下是示例
name = ['naruto','Levon','Airx','Jone']
number = ['3314','2236','5567','6456']
print number[name.index('Levon')]
#字典的创建
phonebook = {'naruto':'13314','Levon':'2236','Airx':'5567','Jone':'6456'}
#dict函数的使用
a = dict(phonebook)
print a['naruto']

#字典示例程序
#这是一个简单的数据库,字典使用人名字作为key,而每个人用另一个字典来表示,其中phone与addr分别表示他们的电话号码与地址。
peoplle = {
'Aire':{
'phone':'110',
'addr':'Lijun street 29'

},
'Jone':{
'phone':'999',
'addr':'Yushan street 39'

},
'serry': {
'phone':'120',
'addr':'Lie street 80'


}
}
#电话号码与地址使用的描述性标签,打印时使用
labels = {
'phone':'phone_number',
'addr':'addrss'
}
name = raw_input('please input your name:')
#询问用户是查号码还是查地址
request = raw_input('Are you want find the name(Q) or find the phone number(A): ')
#使用正确的key
if request == 'Q':
key = 'phone'
elif request == 'A':
key = 'addr'
#如果名字存在于key中,将会得到打印。否则则返回False
if name in peoplle :
print "%s's %s is %s." % (name,labels[key],peoplle[name][key])


#格式化字典%s
phonebook = {'naruto':'13314','Levon':'2236','Airx':'5567','Jone':'6456'}
print "Airx's phone number is %(Airx)s." % phonebook

#比较常见的字典格式化方法常用于HTML中,另外string.Template类也是非常有用的。
temp = '''''''''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>'''''''''

data = {'title':'My Home Page','text':'Welcome to my home page!'}
print temp % data
#clear方法,clear方法用于清除字典中所有的项,类似于list.sort,无返回值或返回None。
phonebook = {'naruto':'13314','Levon':'2236','Airx':'5567','Jone':'6456'}
print phonebook
phonebook = phonebook.clear()
print phonebook
#实例2
x = {}
y = x
x['key'] = 'Value'
print y
x = {}
print y
#实例3
x = {}
y = x
x['key'] = 'Value'
print y
x.clear()
print y

#copy方法,copy可以浅复制出一个具有相同key、value的功能,因值本身是相同的所以并不是副本。
name = {'naruto':'27','Levon':'90','Airx':'80','Jone':'10','abc':['niube','bar','bz']}
user = name.copy()
user['naruto']='Mini'
user['abc'].remove('bz')
print user
print name
#deepcopy方法,deepcopy即所谓的深复制,可复制包含的所有值,通过from引用、
from copy import deepcopy
d = {}
d['name'] = ['admin','sb']
c = d.copy()
dc = deepcopy(d)
d['name'].append('av')
print c
print dc
#fromkeys方法,fromkeys用于特定的键创建新的字典,每个字典都有相应的值,默认为Nane,可以自定义默认值。
d = {}
print d.fromkeys(['name','age'],'(unkown)')

#get方法,get方法是个更宽松访问字典的方法,如试图访问的字典不存在时不会返回错误。
#示例
d = {}
#print d['abc']会返回一个错误
print d.get('name')#返回Nane,可以自定义返回值,例如将Nane改成:print d.get('name','N/A'),当然,如果值存在get也会返回。
#实例 - 本实例与上面的相似,本实例使用get()方法实现。
peoplle = {
'Aire':{
'phone':'110',
'addr':'Lijun street 29'

},
'Jone':{
'phone':'999',
'addr':'Yushan street 39'

},
'serry': {
'phone':'120',
'addr':'Lie street 80'


}
}
phone_book = {
'phone':'phone_number',
'addr':'address'
}
name = raw_input('Please input your name:')
#询问查找号码还是查找地址
request = raw_input('Are you want find the phone number(Q) or find the adders(A):')
#使用正确的key
key = request
if request == 'Q':
key ='phone'
if request == 'A':
key = 'addr'
#使用get提供默认值
person = peoplle.get(name, {})
result = person.get(key,'not available')#如果request = Q,则会匹配peoplle中的phone的值,A则则匹配地址,否则返回‘not available’
lable = phone_book.get(key,key)#key与值将匹配到phone_book的字典中。
print "%s's %s is %s." % (name,lable,result)

#has_key方法,has_key可用于检测字典中是否含有指定的key,表达式:a.has_key(k)相当于k in d.
d = {}
d.has_key('Jone')#return is False.
d['name'] = 'Jone'#return is True
#items与iteritems,items将字典所有的项以列表形式返回,而iteritems则返回一个对象生成器,而不是列表。
d = {'title':'Google web site','url':'https://www.google.com','spam':0}
print d.items()
#iteritems
b = d.iteritems()
print b #会生成一个迭代对象生成器:<dictionary-itemiterator object at 0x029CFB70>
print list(b)#list方法会将迭代对象转换成一个列表形式打印。
#pop,pop会获得用户指定的值,然后将键值从字典中移除。
d = {'b':1,'x':2}
print d.pop('x')
print d


#popitem方法,popitem类似list.pop,后者会弹出最后一个元素,不同的是popitem会随机弹出一键值。
d = {'title':'Google web site','url':'https://www.google.com','spam':0}
print d.popitem()
#setdefault方法与get类似,除能获得给予key所关联的值外,还可以在字典中不含有给定的key的情况下设定相项。
d = {}
d.setdefault('name','N/A')#用setdefailt创建了个key为name,vlue:N/A的键值。
print d
d['name'] = 'Jone'#给name赋值
d.setdefault('name')
print d #如果值存在则返回则,否则将返回默认值,如果不设定默认值则显示None。

#update方法可以利用一个字典项更新另一个字典
d = {'title':'Google web site','url':'https://www.google.com','changed':'Mar 16 17:25 Apr 2016'}
b = {'title':'Google ABCPP site'}
d.update(b)
print d
#vlues和itervlues,vlues以列表形式返回字典中的值,而后者后者返回的是一个迭代对象,不同的是后者可以包含重复的元素。
d = {}
d[1] =1
d[2]=2
d[3]=3
d[4]=4
d[5]=5
print d.values()
a = d.itervalues()
print list(a)
"""""""""

0 评论:

发表评论