序列是python中的一种数据结构,映射是另一种。映射(mapping)通过名字来引用值。python内建的唯一一种映射结构是字典。字典中的值没有特殊的顺序,但都存储在一个特定的键中。键可以是数字、字符串甚至数元组。
1、字典的使用:
序列通过索引来找到元素的取值。
字典通过键来获取它的值。
字段比列表在某些方面更加适用:
①游戏棋盘是用坐标值来组成的
②文件是用文件名来确定的
③数字电话,地址对应一个联系人
这些都不能通过索引来代替。
2、字典的创建:
字典是由键值对组成,一个键值对称为一项。键与值之间用冒号隔开,项与项之间用逗号隔开,整个字典用一对大括号括起来。空字典,即不包含任何项的字典,是有一对大括号组成。
列表,用方括号。
元组,用圆括号。
字典中的键是唯一的,同一个字典中不允许重复,值则是不唯一的。
使用dict函数来建立字段。
3、基本字典操作:
字典的基本行为包括:
①len返回字典中项的数目。
②dic1[k]返回字典dic1中键为k的值。
③dic1[k]=v将值v关联到字典dic1的键k上。
④del dic1[k]删除字典dic1中键为k的项。
⑤k in dic1检查字典dic1中是否含有键为k的项。
可以看到,dic1[k]=v的用法既可以为字典添加新项,也可以用于更改现有项的值。
另外,有:
①键类型:字典的键不一定为整数类型,也可以是浮点型、字符串、元组等等。
②自动添加:为字典中不存在的键分配一个值时,会自动在字典中创建这样一个键值对。
③成员资格:k in dic1是用来查找键是否存在,而不是值是否存在。
4、字典方法:
(1)clear方法
clear方法用于清空字典,但没有返回值。
注意以下两种区别:
dicx与dicy并不是两个字典,而是指向同一字典的两个代号。对dicx的改变从而会影响dicy。因此,对dicx重新赋值或者清空都会影响dicx字典本身,从而影响dicy。
dicx与dicy最初都指向同一个字典。后来使用dicx={}重新将dicx指向了另一个空字典。此后,dicx与dicy就是两个不同的字典,对dicx的改变将不影响dicy。
(2)copy方法:
copy方法主要用于将一个字典复制产生另一个字典,但这种复制属于浅复制(shallow copy)。
对字典x使用copy方法产生一个副本y。对y进行项的添加、删除、清空、值的替换都不影响x,但是对值的改变是会影响到x字典的。
(3)deepcopy函数
deepcoop函数是相对与copy方法的深复制。但它不是字典内建的方法,而是copy模块中的deepcopy函数。
deepcopy函数是一种深复制,复制完成后,非副本做出的任何改变都不会影响到元字典本身。
(4)fromeys方法
fromkeys方法主要是为创建新的字典,该字典所有的键都是相同的值。新项一定要给出键,值可以不给,不给就默认为None。
从上面的例子可以看出,使用fromkeys方法只能产生一个新的字典,而不能该变一个字典本身,或者为一个旧字典添加新项。并且fromkeys方法只能为添加的键使用一个共同的值,即所有的键的值都是相同的,键要么都是none,要么都是一个值。
(5)get方法
get方法是一种访问字典项的方法。如果使用键来访问字典中的项,当我们试图访问字典中不存在的项时会出错。
但是使用get方法则会返回一个默认值,比如none。这个默认值也可以更改。
举例:查询用户电话和地址,对空用户进行了处理。
(6)has_key()方法
用于检查字典中是否含有给出的键。
相当于k in dic
(7)items方法
items方法将所有的字典项以列表方式返回。产生的列表的每一个元素都是原来字典的一项(键-值),但项与项之间在返回是并没有特殊的顺序。
(8)iteritems方法
iteritems方法的作用与items方法大致相同,但是会返回一个迭代器对象而不是列表。
在很多情况下iteritems更高效。
(9)keys方法
keys方法是将字典中所有的键以列表形式返回。类似于items。
(10)iterkeys方法
iterkeys方法是将字典中的键以迭代器的方式返回。类似于iteritems。
(11)popitem方法
popitem方法类似于列表中的list.pop。list.pop方法会弹出列表中的最后一个元素,而popitem弹出一个随机的项。因为在字典中没有顺序的概念。如果想一个接一个的移除并处理项,这个方法就非常有效。
每一次popitem()方法就会在字典中随机移除一项。
字典中没有append等级的方法,这是因为在字典中没有顺序的概念。
(12)setdefault方法
setfault方法在某种程度上类似于get方法,就是能够获得给定键相关联的值。
除此之外,setdefalut方法还能在字典中不含有给定键的情况下设定相应的键值。
setfault方法有两个作用,一个是根据键查看某一个已经存在的项的值,第二是为字典添加一个新的项,添加时可以指定项中的值,也可以不指定,那么就会自动使用默认值None。
(13)update方法
update方法可以利用一个字典去更新另外一个字典。
对于一个旧字典,使用新字典来更新,新字典中的项可以是一项也可以是多项。
如果旧字典中没有新字典中的键,那么新字典中的那项就会被添加到旧字典中。
如果旧字典中有相同的键,那么会用新字典中项的值替代旧字典中的项的值。
(14)values方法
values方法用于以列表的形式返回字典中的值。与items方法和keys方法类似。由于字典中的值可能相同,因此,返回的列表中可以包含重复的元素。
(15)itervalues方法
itervalues方法用于以迭代器的形式返回字典中的值。与iteritems方法和iterkeys方法类似。由于字典中的值可能相同,因此,返回的列表中可以包含重复的元素。
5、小结:
   
 
 
 

初见Python<4>:字典的更多相关文章

  1. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  2. Python的字典

    1.  Python的字典 1.1.  字典的定义 在Python中,字典是一种key-value的数据类型,也是唯一的映射类型:字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器 ...

  3. Python的字典和JSON

    Python的字典和JSON在表现形式上非常相似 #这是Python中的一个字典 dic = { 'str': 'this is a string', 'list': [1, 2, 'a', 'b'] ...

  4. python基础--字典

    Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...

  5. Python dictionary 字典 常用法

    Python dictionary 字典 常用法 d = {} d.has_key(key_in)       # if has the key of key_in d.keys()          ...

  6. python有序字典OrderedDict()

    转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...

  7. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  8. Python的字典类型

    Python的字典类型为dict,用{}来表示,字典存放键值对数据,每个键值对用:号分隔,每个键值对之间用,号分隔,其基本格式如下: d = {key1 : value1, key2 : value2 ...

  9. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由“键-值”对组成的集合,字典中的“值”通过“键”来引用.这里将介绍字典的定义.访问.排序等功能. 字典的创建 字典 ...

随机推荐

  1. 【洛谷 P3628】 [APIO2010]特别行动队 (斜率优化)

    题目链接 斜率优化总结待补,请催更.不催更不补 \[f[i]=f[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\] \[=f[j]+a*sum[i]^2+a*s ...

  2. 20、redis和memcached比较?

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  3. javascript 事件知识集锦

    1.事件委托极其应用 转载的链接:  http://www.webhek.com/event-delegate/#comments 2. 解析javascript事件机制 转载链接:    http: ...

  4. hdu 2962 Trucking (二分+最短路Spfa)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS (Java/Others ...

  5. Linux-进程间通信(N): 各种IPC的使用场景

    1. 管道:只能用于具有亲缘关系的进行通信,使用面相对较窄,实际开发中较少使用: 2. FIFO(命名管道):可以用于任意进程间的通信,对于大块数据的传输效率较高,可应用于单进程大量数据传递,和多个进 ...

  6. 【设计模式】原型模式(Prototype)

    摘要: 1.本文将详细介绍原型模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入原型模式 2. 原型模式的概念及优缺点介绍 3. 原型模式对拷贝的使用 4. 原型模式在A ...

  7. linux中时间精度的获取问题【转】

    转自:http://www.xuebuyuan.com/877633.html 目前项目需要,需要对时间进行基准,基准的精度在微秒.下午老刘给我说不能用do_gettimeofday因为他的精度虽然可 ...

  8. Oracle例外定义

    例外名 ORA-XXXXX SQLCODE ACCESS_INTO_NULL ORA-06530 -6530 CASE_NOT_FOUND ORA-06592 -6592 COLLECTION_IS_ ...

  9. GOLANG编译安装

    GO这个编译器搞的比较混乱,GO本身是汇编+C开发出来的,后来因为觉得自己牛逼,然后用GO语言又写了一次编译器,所以中途抛弃了C,不过这种做法好与不好很难说,go真的这么有自信用自己语言写自己的编译器 ...

  10. 前言-关于学习OC还是学习Swift的个人理解

    一直在考虑一个问题!到底是学swift好呢还是学OC好. 然后得到了解答: 1.如果你只是对苹果系统软件开发有兴趣,把开发作为一种业务爱好,那么选swift就没错,swift也是大势所趋. 2.如果你 ...