【循序渐进学Python】4. Python中的序列——字典
字典是Python内建的六种序列之一。字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键。键可以是数字、字符串甚至是元组。
1. 创建和使用字典
Python中字典可以使用下面的语法来直接创建字典对象:
# ---coding: utf-8 ---
phonebook = {'':'一','':'二','':'三','':'四','':'五'}
字典由多个键以及对应的值组成,每个键及其对应的值为一项。上面的示例中每个阿拉伯数字(key)对应其中文的数字(value)。
1.1 使用dict函数
除了使用上面的语法外,还可以通过dict函数将(key -> value)这样形式的序列转换为字典。
# --- coding: utf-8 ---
items = [('name','Gumby'),('age',42)] #使用dict函数
dic = dict(items) # 输出:{'age': 42, 'name': 'Gumby'}
print dic # 输出:<type 'list'>,类型是一个列表
print type(items) # 输出:<type 'dict'>
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.自动添加:即使一个键在字典中不存在,也可以为其分配一个值。如下示例:
# --- coding: utf-8 --- # 声明一个空列表对象
x = [] # IndexError:list assignment index out of range
# 列表只能够为其索引范围内的元素赋值
x[42] = 'foobar' # 将x的引用变为一个空字典对象
x = {}
x[42] = 'Foobar' # 输出:{42: 'Foobar'}
print x
3.成员资格:表达式key in dic(dic是一个字典)是根据键来查找,而不是值。因为键是唯一的,而不同键的值却可以相同。如下:
people = {
'Alice':{
'phone':'',
'addr':'Foo drive 23'
},
'Beth':{
'phone':'',
'addr':'Baz avenue 90'
},
'Ceil':{
'phone':'',
'addr':'Baz avenue 90'
}
}
# output: True
print 'Ceil' in people
1.3 字典的格式化字符串
字典还有一个有用的地方就可以用来进行格式化字符串,相对于使用元组来说具备更好的可读性。使用字典来格式化字符串很简单,只需要在转换说明符(%)后面加上一个圆括号,圆括号里面是字典的键,接着后面是其他的说明元素,如下所示:
phonebook = {
'Beth':'','Alice':'','Ceil':''
}
#output: Alice's phone number is 1239.
print "Alice's phone number is %(Alice)s." % phonebook
1.4 字典常用函数
Python为字典提供了很多的函数,更多可以参考Python文档中dict的API:Dictionaries,下面例举了几个最常用的函数。
1.4.1 clear
Clear函数会清除字典中所有的项。
# --- coding: utf-8 --- # clear函数
pro_Language = {"C#":"microsoft","Java":"Oracle"} print pro_Language # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
print pro_Language.clear() # 输出:None
print pro_Language # 输出:{}
1.4.2 copy
Copy函数会返回一个具有相同key-value对的新字典(浅复制)
# --- coding: utf-8 --- # copy函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
copy_Pro_Language = pro_Language.copy() # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
print copy_Pro_Language
1.4.3 fromkeys
fromkeys函数使用给定的键建立新的字典,每个键默认对应的值为None。
# --- coding: utf-8 --- # fromkeys函数
pro_Language = {"C#":"microsoft","Java":"Oracle"} print {}.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}
print dict.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}
1.4.4 get
get函数可以访问字典中的项,如果不存在,返回一个None(或者自定义一个默认值)
# --- coding: utf-8 --- # get函数
pro_Language = {"C#":"microsoft","Java":"Oracle"} print pro_Language.get('python') # 输出:None
print pro_Language.get('python','N/A') #输出:N/A
1.4.5 has_key
has_key函数可以检测字典中是否含有给出的键。
# --- coding: utf-8 --- # has_key函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
print pro_Language.has_key('python') # 输出:False
1.4.6 items和iteritems
items函数将所有的字典项以列表方式返回。iteritems函数作用和items类似,但是会返回一个迭代器对象而不是一个列表
# --- coding: utf-8 --- # items/iteritems 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"} # 输出:[('C#', 'microsoft'), ('Java', 'Oracle')]
print pro_Language.items() # 输出:<dictionary-itemiterator object at 0x0000000002659BD8>
print pro_Language.iteritems()
1.4.7 keys和iterkeys
keys函数将字段中的键以列表的形式返回,而iterkeys则返回针对键的迭代器
# --- coding: utf-8 --- # keys/iterkeys 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"} # 输出:['C#', 'Java']
print pro_Language.keys()
# 输出:<dictionary-keyiterator object at 0x0000000002659BD8>
print pro_Language.iterkeys()
1.4.8 values和itervalues
values函数将字段中的值以列表的形式返回,而itervalues则返回针对值的迭代器
# --- coding: utf-8 --- # values/itervalues 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
# 输出:['microsoft', 'Oracle']
print pro_Language.values()
# 输出:<dictionary-valueiterator object at 0x0000000002529BD8>
print pro_Language.itervalues()
1.4.9 pop
pop函数用来获得对应给定键的值,然后将这个项(key-value)从字典中删除
# --- coding: utf-8 --- # pop 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
print pro_Language.pop('C#') # 返回:microsoft
print pro_Language # 输出:{'Java': 'Oracle'}
1.4.10 popitem
popitem函数会获取一个随机的项,然后删除。
# --- coding: utf-8 --- # popitem 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
print pro_Language.popitem() # 返回:('C#', 'microsoft')
print pro_Language # 输出:{'Java': 'Oracle'}
1.4.11 setdefault
setdefault函数和set函数类似,但setdefault函数还能在字典中不包含给定键的情况下,设定相应的值。
# --- coding: utf-8 --- # setdefault 函数
pro_Language = {"C#":"microsoft","Java":"Oracle"}
pro_Language.setdefault('Python',"N/A") # 输出:{'C#': 'microsoft', 'Python': 'N/A', 'Java': 'Oracle'}
print pro_Language
1.4.12 update
update函数可以利用一个字典对象更新另一个字典对象,提供字典中的项会添加到旧的字典中,如果有相同的键则会覆盖
# --- coding: utf-8 --- # update
pro_Language = {"C#":"microsoft","Java":"Oracle"}
script_Language = {'Java':'Sun','python':'Python Software Foundation'} pro_Language.update(script_Language) # 输出:{'C#': 'microsoft', 'python': 'Python Software Foundation', 'Java': 'Sun'}
print pro_Language
参考资料&进一步阅读
《Learn Python The Hard Way, 2nd Edition》
http://www.pythondoc.com/pythontutorial27/index.html
【循序渐进学Python】4. Python中的序列——字典的更多相关文章
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Python笔记7----Pandas中变长字典Series
1.Series概念 类似一维数组的对象,由数据和索引组成 2.Series创建 用Series()函数创建,0,1,2为series结构自带的索引. 可以自己指定索引值,用index,也可以直接用字 ...
- 【循序渐进学Python】2. Python中的序列——列表和元组
序列概览 在Python中有六种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.在这里暂时只讨论列表和元组.列表和元组的主要区别在于:列表可以修改,元组(不可 ...
- 【循序渐进学Python】15.网络编程
Python 内置封装了很多常见的网络协议的库,因此Python成为了一个强大的网络编程工具,这里是对Python的网络方面编程的一个简单描述. 1. 常用的网络设计模块 在标准库中有很多网络设计相关 ...
- 【循序渐进学Python】5.Python常用流程控制及其他语句
1. 赋值语句常用技巧 通过序列解包(sequence unpacking)可以将多个值的序列解开,让后一一放置到变量的序列中.解包的序列中的元素必须和等号左边变量数量一致.如下: values = ...
- 10.python中的序列
本来说完字符串.数字.布尔值之后,应该要继续讲元祖.列表之类的.但是元祖和列表都属于序列,所以有必要先讲讲python的序列是什么. 首先,序列是是Python中最基本的数据结构.序列中的每个元素都分 ...
- 【循序渐进学Python】12.Python 正则表达式简介
正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...
- 【循序渐进学Python】10.模块和包
1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...
- 【循序渐进学Python】1. Python基础知识
1. Python安装和配置 首先需要到Python的官方网站(http://www.python.org/getit/) 下载安装包,现在Python的发行版分为兼容之前Python程序的Pytho ...
随机推荐
- 连接的世界 - LTE时代产业趋势和战略分析
连接的世界 - LTE时代产业趋势和战略分析 作者:华为有线技术公司李常伟 2014-09-22 信息产业发展解放的核心是这个世界连接的方式.由语音到数据.由通信到情感.由人的连接到物的连接.由“哑” ...
- .net微信公众号开发——基础接口
作者:王先荣 本文讲述微信公众号开发中基础接口的使用,包括以下内容: (1)获取许可令牌(AccessToken): (2)获取微信服务器地址: (3)上传.下载多媒体文件: ...
- ubuntu 下截图与快捷键设置
1. 安装 这里使用的 kubuntu sudo apt-get install ksnapshot 2. 设置快捷键 点击左下角的开始菜单,选择`应用程序` `设置` `系统设置` ksnapsho ...
- Photoshop操作指南
缩放工具(Z) 之后涉及到移动功能,暂时切换到小抓手工具. 图1 图2 切换到:暂时切换到:当按住空格键的时候,显示小抓手工具.松开之后,又回到了之前的显示上. 满画布显示当前画面:ctrl+0(数字 ...
- Android中AutoCompleteTextView的使用
1.http://blog.csdn.net/FX_SKY/article/details/9326129 此博客讲解了auto组件如何使用baseAdapter来扩展功能,推荐参照此博客写demo ...
- css3彩色进度条
<html> <head> <title>progress</title> <script type=" ...
- [转]Entity Framework vs. LINQ to SQL
Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 ...
- 分享7款非常实用的jQuery/CSS3插件演示和源码
上次我们分享了15款效果很酷的最新jQuery/CSS3特效,非常不错,今天要分享7个非常实用的jQuery/CSS3插件演示和源码,一起来看看. 1.jQuery ajax点击地图显示商家网点分布 ...
- 电商O2O-11种最佳运营模式
免费模式,是在这种矛盾下应运而生的新型模式.免费模式在未来的几年中,将会不断的渗透到各个行业中,这不单单是加速了行业内部的洗牌速度,更是加速了行业之间的洗牌速度. 未来,免费模式会让行业之间的界限变得 ...
- 谈谈CSS预处理技术中for循环的应用-CSS Sprite
各种新技术的出现,推动着Web前端技术飞速发展,在提升用户体验的同时也方便开发者: 在前端优化时,我们使用CSSSprite技术,把多个图片合在一张图片上,然后通过background-image,b ...