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

[经验分享] 【循序渐进学Python】4. Python中的序列——字典

[复制链接]

尚未签到

发表于 2015-4-19 07:29:27 | 显示全部楼层 |阅读模式
  字典是Python内建的六种序列之一。字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键。键可以是数字、字符串甚至是元组。

1. 创建和使用字典
  Python中字典可以使用下面的语法来直接创建字典对象:



# ---coding: utf-8 ---
phonebook = {'1':'一','2':'二','3':'三','4':'四','5':'五'}
  字典由多个键以及对应的值组成,每个键及其对应的值为一项。上面的示例中每个阿拉伯数字(key)对应其中文的数字(value)。
  

1.1 使用dict函数
  除了使用上面的语法外,还可以通过dict函数将(key -> value)这样形式的序列转换为字典。



1 # --- coding: utf-8 ---
2 items = [('name','Gumby'),('age',42)]
3
4 #使用dict函数
5 dic = dict(items)
6
7 # 输出:{'age': 42, 'name': 'Gumby'}
8 print dic
9
10 # 输出:,类型是一个列表
11 print type(items)
12
13 # 输出:
14 print type(dic)
  

1.2 字典的基本操作
  由于字典也是序列的一种,所起它有很多操作(比如len和成员资格)都和序列类似:


  • len(d):返回d(字典对象)中项的数量;
  • d[key]:返回这个key对应的value;
  • d[key] = v:将值v映射到key值为k的项;
  • key in did:检查d中是否包含键为k的项;
  字典和列表虽然都属于Python内建的序列,但是二者有很大的区别
  1.键类型:字典的键只能是不可变类型(比如:整型、字符串、元组、浮点型等)。
  2.自动添加:即使一个键在字典中不存在,也可以为其分配一个值。如下示例:



1 # --- coding: utf-8 ---
2
3 # 声明一个空列表对象
4 x = []
5
6 # IndexError:list assignment index out of range
7 # 列表只能够为其索引范围内的元素赋值
8 x[42] = 'foobar'
9
10 # 将x的引用变为一个空字典对象
11 x = {}
12 x[42] = 'Foobar'
13
14 # 输出:{42: 'Foobar'}
15 print x
  
  3.成员资格:表达式key in dic(dic是一个字典)是根据键来查找,而不是值。因为键是唯一的,而不同键的值却可以相同。如下:



1 people = {
2     'Alice':{
3         'phone':'2341',
4         'addr':'Foo drive 23'
5     },
6
7     'Beth':{
8         'phone':'1213',
9         'addr':'Baz avenue 90'
10     },
11
12     'Ceil':{
13         'phone':'3219',
14         'addr':'Baz avenue 90'
15     }
16 }
17
18 # output: True
19 print 'Ceil' in people  
  

1.3 字典的格式化字符串
  字典还有一个有用的地方就可以用来进行格式化字符串,相对于使用元组来说具备更好的可读性。使用字典来格式化字符串很简单,只需要在转换说明符(%)后面加上一个圆括号,圆括号里面是字典的键,接着后面是其他的说明元素,如下所示:



1 phonebook = {
2     'Beth':'1290','Alice':'1239','Ceil':'3258'
3 }
4
5 #output: Alice's phone number is 1239.
6 print "Alice's phone number is %(Alice)s." % phonebook
  

1.4 字典常用函数
  Python为字典提供了很多的函数,更多可以参考Python文档中dict的API:Dictionaries,下面例举了几个最常用的函数。
  
1.4.1 clear
  Clear函数会清除字典中所有的项。



1 # --- coding: utf-8 ---
2
3 # clear函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5
6 print pro_Language # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
7 print pro_Language.clear() # 输出:None
8 print pro_Language # 输出:{}
  
  
1.4.2 copy
  Copy函数会返回一个具有相同key-value对的新字典(浅复制)



1 # --- coding: utf-8 ---
2
3 # copy函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}  
5 copy_Pro_Language = pro_Language.copy()
6
7 # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
8 print copy_Pro_Language
  
  
1.4.3 fromkeys
  fromkeys函数使用给定的键建立新的字典,每个键默认对应的值为None。



1 # --- coding: utf-8 ---
2
3 # fromkeys函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5
6 print {}.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}
7 print dict.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}
  
  
1.4.4 get
  get函数可以访问字典中的项,如果不存在,返回一个None(或者自定义一个默认值)



1 # --- coding: utf-8 ---
2
3 # get函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5
6 print pro_Language.get('python') # 输出:None
7 print pro_Language.get('python','N/A') #输出:N/A
  
  
1.4.5 has_key
  has_key函数可以检测字典中是否含有给出的键。



1 # --- coding: utf-8 ---
2
3 # has_key函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.has_key('python') # 输出:False
  
  
1.4.6 items和iteritems
  items函数将所有的字典项以列表方式返回。iteritems函数作用和items类似,但是会返回一个迭代器对象而不是一个列表



1 # --- coding: utf-8 ---
2
3 # items/iteritems 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5
6 # 输出:[('C#', 'microsoft'), ('Java', 'Oracle')]
7 print pro_Language.items()
8
9 # 输出:
10 print pro_Language.iteritems()
  
  
1.4.7 keys和iterkeys
  keys函数将字段中的键以列表的形式返回,而iterkeys则返回针对键的迭代器



1 # --- coding: utf-8 ---
2
3 # keys/iterkeys 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5
6 # 输出:['C#', 'Java']
7 print pro_Language.keys()
8 # 输出:
9 print pro_Language.iterkeys()
  
  
1.4.8 values和itervalues
  values函数将字段中的值以列表的形式返回,而itervalues则返回针对值的迭代器



1 # --- coding: utf-8 ---
2
3 # values/itervalues 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 # 输出:['microsoft', 'Oracle']
6 print pro_Language.values()
7 # 输出:
8 print pro_Language.itervalues()
  
  
1.4.9 pop
  pop函数用来获得对应给定键的值,然后将这个项(key-value)从字典中删除



1 # --- coding: utf-8 ---
2
3 # pop 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.pop('C#') # 返回:microsoft
6 print pro_Language # 输出:{'Java': 'Oracle'}
  
  
1.4.10 popitem
  popitem函数会获取一个随机的项,然后删除。



1 # --- coding: utf-8 ---
2
3 # popitem 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.popitem() # 返回:('C#', 'microsoft')
6 print pro_Language # 输出:{'Java': 'Oracle'}
  
  
1.4.11 setdefault
  setdefault函数和set函数类似,但setdefault函数还能在字典中不包含给定键的情况下,设定相应的值。



1 # --- coding: utf-8 ---
2
3 # setdefault 函数
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 pro_Language.setdefault('Python',"N/A")
6
7 # 输出:{'C#': 'microsoft', 'Python': 'N/A', 'Java': 'Oracle'}
8 print pro_Language
  
  
1.4.12 update
  update函数可以利用一个字典对象更新另一个字典对象,提供字典中的项会添加到旧的字典中,如果有相同的键则会覆盖



1 # --- coding: utf-8 ---
2
3 # update
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 script_Language = {'Java':'Sun','python':'Python Software Foundation'}
6
7 pro_Language.update(script_Language)
8
9 # 输出:{'C#': 'microsoft', 'python': 'Python Software Foundation', 'Java': 'Sun'}
10 print pro_Language
  

参考资料&进一步阅读
  《Python基础教程》
  《Learn Python The Hard Way, 2nd Edition》
  http://www.pythondoc.com/pythontutorial27/index.html

运维网声明 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-58528-1-1.html 上篇帖子: Python学习系列(二)(基础知识) 下篇帖子: python日期操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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