字典是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 # 输出:<type 'list'>,类型是一个列表
11 print type(items)
12
13 # 输出:<type 'dict'>
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 # 输出:<dictionary-itemiterator object at 0x0000000002659BD8>
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 # 输出:<dictionary-keyiterator object at 0x0000000002659BD8>
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 # 输出:<dictionary-valueiterator object at 0x0000000002529BD8>
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

【循序渐进学Python】4. Python中的序列——字典相关推荐

  1. python中数据读写_【循序渐进学Python——文件中数据的读写以及操作】

    [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] 相信大家都想过自己有一天,可以用 ...

  2. 【循序渐进学Python】Python中的循环(二)——while循环与嵌套

    [循序渐进学Python]Python中的循环--while循环与嵌套 while循环(在给定的判断条件为 True 时执行循环体,False退出循环体) 当满足一定条件的时候才循环,具体循环多少次没 ...

  3. 【循序渐进学Python】Python中的循环(一)——for循环(嵌套)与range函数

    [循序渐进学Python]Python中的循环(一)--for循环(嵌套)与range函数 在前面博客中我们介绍了Python程序结构的三要素,其中就提到了循环,而今天我们就来看看for循环和for循 ...

  4. 循序渐进学Python:安装、使用与运行程序

    Python这种语言的相关技术正在飞速的发展,用户数量急剧扩大,本文向读者介绍Python编程的有关知识. [51CTO.com独家特稿]Python是一种功能强大的解释执行自动编译的动态型语言,面向 ...

  5. python中的序列封包和序列解包

    今天我们要学的内容是python中的序列封包和序列解包,在此之前,我要先给你们讲解一下python中的序列. 可能刚接触python的朋友们都听过序列这个词,那么什么是序列呢? 序列就是可以进行索引和 ...

  6. 【循序渐进学Python】面向对象知多少——魔方方法

    [循序渐进学Python]面向对象知多少--魔方方法 据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特 ...

  7. 【循序渐进学Python】面向对象知多少——继承

    [循序渐进学Python]面向对象知多少--继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制,那么今天我们来学习面向对象的第二大特征--继承. 继承 什么是继承 ...

  8. python中有序序列是什么意思_Python中列表是一种有序序列

    [简答题]磁盘管理 [简答题]造锍熔炼习题 [填空题]38. 表达式 abs(3+4j) 的值为____________. [单选题]Linux安装过程中的硬盘分区工具是( ). [简答题]shell ...

  9. python中的序列总结:列表,元组,字符串

    首先python中的序列有列表,元组,字符串. 列表List是python里面最基本的数据结构.序列中每个元素都是从索引(下标)从0开始,依次叠加. List操作的方法很多,只能熟悉基本常用的这个方法 ...

  10. Python 中的序列类型支持哪些公共操作

    一.序列类型支持哪些公共操作 Python 中的序列类型分为:可变序列和不可变序列,都支持我们序列类型的所有操作 可变序列:列表 不可变序列:字符串和元祖 1.支持通过数字索引取值 a = (&quo ...

最新文章

  1. C# 获得系统AppData路径
  2. LeetCode 23. Merge k Sorted Lists--Python解法--优先队列,分治法
  3. 人工智能的现状与未来
  4. 数据库密码加密 使用的是 druid加密
  5. 富文本框让最大四百像素_TinyMCE 富文本编辑器 ━━ 基本配置
  6. delphi 常用属性/方法《转》
  7. php伪协议实现命令执行的七种姿势
  8. Flink数据清洗(Kafka事实表+Redis维度表)
  9. mongodb地理空间索引原理阅读摘要
  10. MySQL 字段内容区分大小写
  11. Java使用OpenCV3.2实现视频读取与播放
  12. java string to bit_Java Convert String to Binary
  13. 计算机二级C语言考试模拟系统+真题题库软件下载
  14. 如何用latex高效写毕业论文(超简明+实用经验分享)
  15. 模拟T1数字number
  16. LINUX最小系统安装过程中的Partition Disks分配问题
  17. iPhone 手机存储空间没有了
  18. 一起来捉妖找不到服务器,一起来捉妖妖怪分布大全 所有妖灵不同地点位置详解...
  19. 可怕,任天堂找到了一种新的赚钱方式……​
  20. mysql导入dat文件_.dat导入数据库

热门文章

  1. python模块导入三种方式
  2. PHP实现折半查询算法
  3. android利用AudioRecord实现录音功能(kotlin语言)
  4. oracle 检查链接数,oracle连接数检查
  5. larveral 直接拷贝安装_重新安装网卡驱动的电脑操作
  6. mysql如何管理事务管理_浅谈MySQL事务管理(基础)
  7. linux下压缩解压缩见解
  8. Android 中的Binder跨进程通信机制与AIDL
  9. 短视频秒播优化实践(一)
  10. 接口自动化测试框架搭建(7、连接数据库提交sql方法以及打印日志方法封装)--python+HTMLTestRunnerCN+request+unittest+mock+db