设为首页 收藏本站
查看: 834|回复: 0

[经验分享] 《python基础教程》笔记之 字典

[复制链接]

尚未签到

发表于 2015-12-1 08:53:48 | 显示全部楼层 |阅读模式

  • 字典创建
  字典由多个键值对组成,每个键和对应值之间用冒号隔开,项之间用逗号隔开,而整个字典用一对大括号括起来,如
  >>> phonebook={'alice':'0123', 'Betch':'4567', 'Cecil':'7854'}
>>> phonebook
{'Betch': '4567', 'alice': '0123', 'Cecil': '7854'}
  dict -- 通过其他映射、(键,值)这样的序列对或者关键字建立字典,如
  >>> items = [('name', 'gtum'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'gtum'}
>>> d['age']
42
>>> d = dict(name='gtum', age=42)
>>> d
{'age': 42, 'name': 'gtum'}


  • 基本操作
  len(d) -- 返回d中项(键值对)的数量
  d[k] -- 返回关联到键k上的值
  d[k] = v -- 将值v关联到键k上
  del d[k] -- 删除键为k的项
  k in d -- 检查d中是否含有键为k的项
  字典与列表区别,如下
  键类型: 字典的键可以为任何不可变类型
  自动添加:即是那个键起初在字典中并不存在,也可以为它分配一个值
  >>> x = {}
>>> x[42] = 'f'
>>> x
{42: 'f'}
  成员资格:k in d查找的是键



#简单数据库
#使用人名作为键的字典。每个人用另一个字典来表示,其键’phone‘和’addr‘分别表示他们的电话号码和地址
people={
'Alice':{
'phone':'2341',
'addr':'Foo drive 23'
},
'Beth':{
'phone':'9102',
'addr':'Bar Street 42'
},
'Cecil':{
'phone':'3158',
'addr':'Baz avenue 90'
}
}
#针对电话号码和地址使用的描述性标签,会在打印输出的时候用到
labels={
'phone':'phone number',
'addr':'address'
}
name=raw_input('Name:')
#查找电话号码还是地址?使用正确的键:
request=raw_input('key(p/a):')
#使用正确的键:
if request == 'p':key = 'phone'
if request == 'a':ker = 'addr'
#如果名字是字典中的有效键才打印信息
if name in people : print "%s's %s is %s." %\
(name, labels[key], people[name][key])
  结果
  Name:Beth
key(p/a):p
Beth's phone number is 9102.


  • 字典格式化字符串
  只以字符串作为键的字典来格式化字符串,如
  >>> phonebook={'alice':'0123', 'Betch':'4567', 'Cecil':'7854'}
>>> "alice's phnoe is %(alice)s." % phonebook
"alice's phnoe is 0123."


  • 字典方法
  clear -- 清楚字典中所有的项,直接作用在原字典上
  copy -- 返回一个具有相同键值对的薪资点,浅拷贝
  >>> x={'username':'admin','machines':['foo','bar']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('foo')
>>> y
{'username': 'mlh', 'machines': ['bar']}
>>> x
{'username': 'admin', 'machines': ['bar']}
  deecopy -- 深拷贝
  fromkeys -- 使用给定的键建立新的字典,每个键默认对应的值为None,或者自己提供默认值
  >>> x = dict.fromkeys(['name', 'age'], 'un')
>>> x
{'age': 'un', 'name': 'un'}
  get -- 访问字典,访问一个不存在的键时,返回None,或者自定义默认返回值
  >>> x.get('it', 'n/a')
'n/a'



#使用get()的简单数据库

people={
'Alice':{
'phone':'2341',
'addr':'Foo drive 23'
},
'Beth':{
'phone':'9102',
'addr':'Bar Street 42'
},
'Cecil':{
'phone':'3158',
'addr':'Baz avenue 90'
}
}
#针对电话号码和地址使用的描述性标签,会在打印输出的时候用到
labels={
'phone':'phone number',
'addr':'address'
}
name=raw_input('Name:')
#查找电话号码还是地址?
request=raw_input('key(p/a):')
#使用正确的键:
key = request #如果请求既不是'p'也不是'a'
if request == 'p':key = 'phone'
if request == 'a':key = 'addr'
#使用get()提供默认值
person = people.get(name, {})
label = labels.get(key, key)
result = person.get(key, 'not available')
print "%s's %s is %s." %\
(name, label, result)
  结果如下
  Name:Beth
key(p/a):a
Beth's address is Bar Street 42.
  has_key -- 检查字典中是否含有给出的键
  items -- 将所有的字典项以列表方式返回,这些列表项中的每一项都来自(键,值)
  iteritems -- 返回迭代器
  keys -- 将字典中的键以列表形式返回
  iterkeys -- 返回针对键的迭代器
  pop -- 获得对应于给定键的值,然后将这个键值对从字典中移除
  popitem -- 弹出随机的项
  setdefault -- 获得与给定键相关联的值,在字典中不含有给定键的情况下设定相应的键值
  >>> x={'username':'admin','machines':['foo','bar']}
>>> x.pop('username')
'admin'
>>> x={'username':'admin','machines':['foo','bar']}
>>> x.setdefault('hh', 'n/a')
'n/a'
>>> x
{'username': 'admin', 'hh': 'n/a', 'machines': ['foo', 'bar']}
>>> x['hh'] = 'hh'
>>> x.setdefault('hh', 'n/a')
'hh'
>>> x
{'username': 'admin', 'hh': 'hh', 'machines': ['foo', 'bar']}
  update -- 利用一个字典项更新另外一个字典项,提供的字典的项会被添加到旧的字典中,若有相同的键则会进行覆盖
  >>> x={'username':'admin','machines':['foo','bar']}
>>> y={'hh':'haha'}
>>> x.update(y)
>>> x
{'username': 'admin', 'hh': 'haha', 'machines': ['foo', 'bar']}
  values -- 以列表的形式返回字典中的值,列表中可以包含重复的元素
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145656-1-1.html 上篇帖子: Python Udp Socket 下篇帖子: 学习selenium python版最初的一个小想法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表