python类型-字典
字典是python语言中唯一的映射类型,映射对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系。一个字典对象是可变的,是一个容器类型,可存储任意个数的python对象,其中也可以包括其他容器类型。
1.创建字典和给字典赋值
创建字典只需要把字段赋值给一个变量,不管这个字典是否包含元素。
>>> dict1 = {}
>>> dict2 = {'name':'earth', 'port':80}
或者使用工厂方法dict()来创建字典。
>>> fdict = dict((['x', 1], ['y', 2]))
>>> fdict
{'y': 2, 'x': 1}
另外可使用内建方法fromkeys()来创建一个"默认"字典,字典中元素具有相同的值(如果没有给出,默认为None)
>>> ddict = {}.fromkeys(('x', 'y'), -1)
>>> ddict
{'y': -1, 'x': -1}
>>> edict = {}.fromkeys(('foo', 'bar'))
>>> edict
{'foo': None, 'bar': None}
2.访问字典中的值
遍历一个字典(一般用键),只需要循环查看它的键
>>> dict2 = {'name':'foo', 'port':80}
>>> for key in dict2.keys():
... print 'key:%s value:%s' % (key, dict2[key])
...
key:name value:foo
key:port value:80
另外可用迭代访问类序列对象(sequence-like objects),比如字典和文件,只需要用字典的名字就可以在for循环里遍历字典。
>>> dict2 = {'name':'foo', 'port':80}
>>> for key in dict2:
... print 'key:%s value:%s' % (key, dict2[key])
...
key:name value:foo
key:port value:80
需要得到字典中某个元素的值,在字典键加上中括号得到。
>>> dict2 = {'name':'foo', 'port':80}
>>> dict2['name']
'foo'
3.更新字典
有以下方式:添加一个新数据项或新元素(即,一个键-值对);修改一个已存在的数据项;删除一个已存在的数据项。
>>> dict2 = {'name':'foo', 'port':80}
>>> dict2['name'] = 'jone'
>>> dict2['arch'] = 6969
>>> dict2
{'arch': 6969, 'name': 'jone', 'port': 80}
>>> del dict2['name']
>>> dict2
{'arch': 6969, 'port': 80}
>>> dict2.clear()
>>> dict2
{}
>>> del dict2
>>> dict2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dict2' is not defined
>>> dict2 = {'name':'foo', 'port':80}
>>> dict2.pop('name') #删除并返回键为"name"的条目
'foo'
>>> dict2
{'port': 80}
4.字典的键
不允许一个键对应多个值:一个键对应多个值是不允许的(像列表、元组和其它字典这样的容器是可以的)。当有键发生冲突(即字典键重复赋值),取最后的赋值;
键必须是可哈希的:所有不可变类型都是可哈希的,值相同的数字表示相同的键(例如1和1.0)。
5.映射类型操作符
5.1.标准类型操作符
=、<、>、and
5.2.字典的键查找操作符([])
键查找操作符仅用于字典类型的操作符,用键查询,键是参数
d[k] = v 通过键"k",给字典中某个元素赋值"v"
d[k] 通过键"k",查询字典中某个元素的值。
5.3.(键)成员关系操作(in,not in)
类似于has_key()方法
>>> 'name' in dict2
True
6.映射类型的内建函数和工厂函数
6.1.标准类型函数(type()、str()和cmp())
type():对字典调用type()工厂方法,返回字典类型"<type 'dict'>"
str():返回字典的字符串表示
cmp():首先比较字典的大小,然后是键,最后是值。
6.2.映射类型相关函数
dict():用来创建字典,如果不提供参数,生成空字典;如果参数是可迭代的(一个序列,或一个迭代器,或一个支持迭代的对象),那每个可迭代的元素必须成对出现。在每个值对中,第一个元素为字典的键,第二个元素为字典的值。
>>> dict()
{}
>>> dict([['x', 1], ['y', 2]])
{'y': 2, 'x': 1}
>>> dict([('xy'[i-1], i) for i in range(1,3)])
{'y': 2, 'x': 1}
len():对字典使用len(),返回所有元素(键-值对)的数目
>>> dict2 = {'a':1, 'b':2}
>>> len(dict2)
2
hash():判断某个对象是否可以作为一个字典的键,将一个对象作为参数传递给hah(),返回这个对象的哈希值,只有这个对象是可哈希的,才可以作为字典的键。
>>> hash([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(())
3527539
6.3.映射类型内建方法
keys():返回一个列表,包含字典中所有的键;
values():返回一个列表,包含字典中所有的值;
items():返回一个包含所有(键-值)元组的列表。
sorted():
{'a': 1, 'c': 2, 'b': 3}
>>> for ek in sorted(dict1):
... print 'key:', ek, 'value:', dict1[ek]
...
key: a value: 1
key: b value: 3
key: c value: 2
update():将一个字典的内容添加到另一个字典中,字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目将被新键所对应的值覆盖。
>>> dict1
{'a': 1, 'c': 2, 'b': 3}
>>> dict2 = {'b':3, 'd':5}
>>> dict1.update(dict2)
>>> dict1
{'a': 1, 'c': 2, 'b': 3, 'd': 5}
>>>
copy():返回一个字典的副本,浅复制。
setdefault():检查字典中是否含有某键,如果字典中这个键存在,可以取到它的值,如果键在字典中不存在,可以给这个键赋默认值并返回此值。
>>> mdict = {'host':'zheng', 'port':80}
>>> mdict.setdefault('prot', 'tcp')
'tcp'
>>> mdict.setdefault('port', '8080')
80
>>> mdict.items()
[('host', 'zheng'), ('prot', 'tcp'), ('port', 80)]
>>>
附录:映射类型内建方法
|
方法名字 |
操作 |
|
dict.clear() |
删除字典中所有的元素 |
|
dict.copy() |
返回字典(浅复制)的一个副本 |
|
dict.fromkeys(seq, val=None) |
创建并返回一个新字典,以seq中的元素作为该字典的键,val作为该字典中所有键对应的初始值,如果不提供此值,则默认为None |
|
dict.get(key, default=None) |
对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,则返回default的值(参数default默认为None) |
|
dict.has_key(key) |
如果键在字典中存在,返回True,否则返回False,等价于in、not in操作符 |
|
dict.items() |
返回一个包含字典中键、值对元组的列表 |
|
dict.keys() |
返回一个包含字典中键的列表 |
|
dict.iter() |
方法iteritems()、iterkeys()、itervalues()与它们对应的非迭代方法一样,不同的是他们返回一个子迭代,而不是一个列表 |
|
dict.pop(key[, default]) |
和get()方法类似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,则引发KeyError异常 |
|
dict.setdefault(key, default=None) |
和方法set()类似,但如果字典中不存在key键,则由dict[key]=default为它赋值 |
|
dict.update(dict2) |
将字典dict2的键值对添加到字典dict |
|
dict.values() |
返回一个包含字典中所有值的列表 |
python类型-字典的更多相关文章
- python内置数据类型-字典和列表的排序 python BIT sort——dict and list
python中字典按键或键值排序(我转!) 一.字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序. Py ...
- Python的字典类型
Python的字典类型为dict,用{}来表示,字典存放键值对数据,每个键值对用:号分隔,每个键值对之间用,号分隔,其基本格式如下: d = {key1 : value1, key2 : value2 ...
- python中字典类型的使用
Python字典类型 字典是一种键值对的集合,键值对之间无序 字典类型的定义 采用{}或者dict()来创建字典对象,键值对之间使用:进行分隔. {<键1>:<值1>, < ...
- Python:字典类型
概念 无序的,可变的,键值对集合 定义 方式1 {key1: value1, key2: value2, ......} 方式2 fromkeys(S, v=None) 静态方法:类和对象都可以调用 ...
- python字典转bytes类型字典
python字典转bytes类型字典import base64 import json 1. a={"Vod":{"userData":"{}&quo ...
- 【python】构造字典类型字典
字典类型字典:就是包含字典类型的字典,如{'sss': {'ss': 'dddsdsdsd'}} 构造方式: a={} b="sss" a[b]={} a[b]['ss'] = & ...
- Python中字典和集合
Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...
- Python的字典
1. Python的字典 1.1. 字典的定义 在Python中,字典是一种key-value的数据类型,也是唯一的映射类型:字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器 ...
- python基础--字典
Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...
随机推荐
- Maven工程
maven:父子工程 1,父工程并没有实质性的内容,所有的jar包都在里面,也就是说只需要管理jar包即可,不参与任务方法逻辑 2,在父工程中拥有很多的子模块,每一个子模块都代表了不用的包如(pack ...
- KEIL5.11安装小结
一.注意点 1.安装路径不能带中文,必须是英文路径 2.安装目录不能跟 51 的 KEIL 或者 KEIL4 冲突,三者目录必须分开 3.KEIL5 不像 KEIL4 那样自带了很多厂商的 MCU 型 ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- 优雅的使用BeanUtils对List集合的操作
摘要 在业务员流程的时候,我们在Entity.Bo.Vo层数据间可能经常转换数据,Entity对应的是持久层数据结构(一般是数据库表的映射模型).Bo对应的是业务层操作的数据结构.Vo就是Contro ...
- jquery简单实现复选框的全选与反选
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- HashMap面试题解答
一.HashMap的实现原理? 此题可以组成如下连环炮来问 你看过HashMap源码嘛,知道原理嘛?为什么用数组+链表?hash冲突你还知道哪些解决办法?我用LinkedList代替数组结构可以么?既 ...
- Excel解除'工作表保护密码',并复原密码设定
前提要求 Office 2003(也就是老版的.xls文件) 用到宏操作 可以解除[审阅->保护工作表]的密码保护,其他的密码保护不能处理. 解决方案 打开需解除保护密码的Excel文件(.xl ...
- k8s集群———etcd-三节点部署
etcd集群部署 ,创建etcd可执行文件,配置文件,证书文件存放目录 mkdir /opt/etcd/{bin,cfg,ssl} -p ,创建包文件存放目录 mkdir /soft -p ,解压et ...
- 从桌面到 Web -- 领域模型
让我们暂时告别一下 ASP.NET Core 先介绍一下这个虚拟项目.因为我的主要目的是通过一个项目,全面学习一下 ASP.NET Core,所以这个项目时一个很简单的,不具备实际应用价值的虚拟项目, ...
- 一文MyBatis-Plus快速入门
目录 一.依赖及配置 1.在idea中创建一个SpringBoot项目,在pom.xml中添需要的依赖 2.配置数据库连接 3.在启动类中添加注解 @MapperScan 扫描Mapper接口包 4. ...