字典是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类型-字典的更多相关文章

  1. python内置数据类型-字典和列表的排序 python BIT sort——dict and list

    python中字典按键或键值排序(我转!)   一.字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序. Py ...

  2. Python的字典类型

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

  3. python中字典类型的使用

    Python字典类型 字典是一种键值对的集合,键值对之间无序 字典类型的定义 采用{}或者dict()来创建字典对象,键值对之间使用:进行分隔. {<键1>:<值1>, < ...

  4. Python:字典类型

    概念 无序的,可变的,键值对集合 定义 方式1 {key1: value1, key2: value2, ......} 方式2 fromkeys(S, v=None) 静态方法:类和对象都可以调用 ...

  5. python字典转bytes类型字典

    python字典转bytes类型字典import base64 import json 1. a={"Vod":{"userData":"{}&quo ...

  6. 【python】构造字典类型字典

    字典类型字典:就是包含字典类型的字典,如{'sss': {'ss': 'dddsdsdsd'}} 构造方式: a={} b="sss" a[b]={} a[b]['ss'] = & ...

  7. Python中字典和集合

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

  8. Python的字典

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

  9. python基础--字典

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

随机推荐

  1. 2018-2-13-wpf-GifBitmapDecoder-解析-gif-格式

    title author date CreateTime categories wpf GifBitmapDecoder 解析 gif 格式 lindexi 2018-2-13 17:23:3 +08 ...

  2. Arcgis api for javascript学习笔记(3.2版本) - 匀速行驶轨迹动画效果

    一.前言 有这样一个需求:已知某条线上的n个点的经纬度数组 ,实现物体运行轨迹. 如果这些点中两个距离很近,那么我们可以用一个定时器在地图上每次重新画一个点,这样肉眼看到这个点上的运动效果,如下图代码 ...

  3. ASP.NET WebForm Identity使用

    环境 win10企业版x64+visual studio 2017+.net 4.5 step1 基本使用+邮件确认+密码重置 https://docs.microsoft.com/en-us/asp ...

  4. 五分钟学Java:可变参数究竟是怎么一回事?

    在逛 programcreek 的时候,我发现了一些专注基础但不容忽视的主题.比如说:Java 的可变参数究竟是怎么一回事?像这类灵魂拷问的主题,非常值得深入地研究一下. 我以前很不重视基础,觉得不就 ...

  5. 深入浅出ES6的标准内置对象Proxy

    Proxy是ES6规范定义的标准内置对象,可以对目标对象的读取.函数调用等操作进行拦截.一般来说,通过Proxy可以让目标对象"可控",比如是否能调用对象的某个方法,能否往对象添加 ...

  6. DOCKER学习_010:Docker的文件系统以及制作镜像

    一 文件系统简介 1.1 Linux文件系统 LInux空间组成分为内核空间和用户空间(使用rootfs) linux文件系统由 bootes和 rootfs组成, bootes主要包含boot1 o ...

  7. 敏捷开发:代码Review

    热情高涨 代码走查作为一种流程形式,起初大家的参与热情非常高涨. 因为,自己可以学习到别人一些巧妙的思想,自己的代码和习惯都暴漏出来. 这个过程中不断地吸收和改正. 但是...... 我们一开始组织的 ...

  8. Python 官方团队在打包项目中踩过的坑

    花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...

  9. HBase学习笔记(一)——基础入门

    1.what:什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储. HBase是一个高可靠 ...

  10. 12款好用的Visual Studio插件,最后一款良心推荐

    目录 01 CodeMaid 02 Markdown Editor 03 ReSharper 04 GitHub Extension for Visual Studio 05 ZenCoding 06 ...