字典 dict

字典是Python的另一种有序的可变数据结构,且可存储任意类型对象。

字典是一种键值对的数据容器,每个键值(key:value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号“{}”中。键和值两者一一对应,与表不同的是,词典的元素没有顺序,不能通过下标引用元素。字典是通过键来引用。

字典中的键必须是唯一的同时不可变的,值则没有限制。

创建 dict

>>> dict1 = {'key1':'value1' , 'key2':'value2' , 'key3':'value3'}
>>> dict1
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}

字典中的键必须是唯一的,类型是不可变类型。因此,也可以通过如下方式创建

>>> dict1 = {'key1':'value1' , 'key2':'value2' , 3:'value3'}
>>> dict1
{'key2': 'value2', 'key1': 'value1', 3: 'value3'}

甚至:

>>> t = (1,2,3) # 元组是不可变的类型,可以作为键
>>> dict1 = {'key1':'value1' , t:'value2' , 3:'value3'}
>>> dict1
{'key1': 'value1', 3: 'value3', (1, 2, 3): 'value2'}

由于一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖掉:

>>> dict1['key4'] = 'VALUE4'
>>> dict1
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1', 'key4': 'VALUE4'}

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>> dict1['key4'] = 'value4'
>>> dict1
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1', 'key4': 'value4'}

要避免key不存在的错误,有两种办法:

# 一是通过in判断key是否存在:
>>> 'value4' in dict1
False # 二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
>>> dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>> dict1
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
>>> dict1['key5'] = dict1.get('value5','value5')
>>> dict1
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1', 'key5': 'value5'}
>>>

注意:返回None的时候Python的交互式命令行不显示结果。

dict函数快速构造字典:

>>> zip(["a","b","c"],[4,5,6])
[('a', 4), ('b', 5), ('c', 6)]
>>> dict(zip(["a","b","c"],[4,5,6]))
{'a': 4, 'c': 6, 'b': 5}
>>> dict(name="lans",age="22")
{'age': '22', 'name': 'lans'}
>>>

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而增加;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

访问 dict 中的元素

dict在创建时就指定了key:value的关系,程序可以通过key来访问对应的元素。

>>> dict1 = {'key1':'value1' , 'key2':'value2' , 'key3':'value3'}
>>> dict1['key1']
'value1'

字典中的常见的方法:

  • clear():从字典中删除所有项

例:

>>> dict1.clear()
>>> dict1
{}
  • copy():创建并返回字典的一个浅拷贝(新字典中的元素是对原始字典中元素的引用)

例如:添加一个元素“a”,返回其在列表中个数

>>> d1 = {1:'a',2:'b',3:'c'}
>>> d2 = d1.copy()
# 用id()函数可以看出值是同一个对象
>>> id(d1[2])
140415073723656
>>> id(d2[2])
140415073723656
>>>
# 但两个字典本身不是同一个对象
>>> id(d2)
140415072754216
>>> id(d1)
140415072754776
# 修改d2中的一个值,d1中的将不会被改变,此时d1[1]和d2[1]已经不是同一个对象了。
>>> d2[1]="A"
>>> d2
{1: 'A', 2: 'b', 3: 'c'}
>>> d1
{1: 'a', 2: 'b', 3: 'c'}
  • get(key [ , returnValue]):返回key对应的值;如果key不在字典中,同时指定了returnValue,就返回指定的值。如果没有指定returnValue,就返回none。

  • has_key(key):如果key在字典中,就返回1,否则返回0

例如:

>>> d1 = {1:'a',2:'b',3:'c'}
>>> d1.has_key(1)
True
>>> d1.has_key(4)
False
  • items():返回一个由元组构成的列表,每个元组包含一个键-值对

例如:

>>> d1.items()
[(1, 'a'), (2, 'b'), (3, 'c')]
  • keys():返回字典中所有键的列表

例如:

>>> d1.keys()
[1, 2, 3]
  • values():返回字典所有值的一个列表

例如:

>>> d1.values()
['a', 'b', 'c']
  • popitem():删除任意键-值对,并作为两个元素的一个元组返回。如果字典为空,会产生KeyError异常

  • update(newdic):将来自newdic的所有键-值对添加到当前字典中,并覆盖同名键的值

例如:

>>> d1 = {1:'a',2:'b',3:'c'}
>>> d2 = {3:'A',4:'B',5:'C'}
>>> d1.update(d2)
>>> d1
{1: 'a', 2: 'b', 3: 'A', 4: 'B', 5: 'C'}
  • pop(key):指定key 删除对应的value

例如:

>>> d1.pop(1)
'a'
>>> d1
{2: 'b', 3: 'c'}
>>> d1.pop(3)
'c'
>>> d1
{2: 'b'}
  • fromkeys(seq[, value])):将seq中的元素作为key,返回一个字段。对应的value为可选的,默认为None

例如:

>>> dict = dict.fromkeys(seq)
>>> dict
{'age': None, 'name': None, 'sex': None}
  • iterkeys():返回字典键的一个迭代器

  • itervalues():返回字典值得一个迭代器

  • iteritems():返回键-值对的一个迭代器

转载自:Python基本数据类型——字典 https://www.cnblogs.com/wshenjin/p/7192153.html

Python 数据类型--字典类型的更多相关文章

  1. python数据类型——字典类型

    字典(dictionary) python中唯一的映射类型,采用键值对(key-value)的形式储存数据,python对key进行哈希函数运算,所以key值必须是可哈希的,可哈希表示key必须是不可 ...

  2. Python的字典类型

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

  3. python学习笔记(10)--组合数据类型(字典类型)

    理解映射: 映射是一种键(索引)和值(数据)的对应.字典是键值对的集合,键值之间无序.用大括号表示{},和dict()创建,键值对用冒号:表示. {键:值,键:值,键:值} >>> ...

  4. Python 数据类型--Bytes类型

    一.Bytes类型 在Python3以后,字符串和bytes类型彻底分开了.字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的. bytes数据类型在所有的操作和使用甚至内置方法上和字 ...

  5. 9 python 数据类型—字典

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可 ...

  6. python中字典类型的使用

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

  7. Python:字典类型

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

  8. python数据类型:字典dict常用操作

    字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...

  9. Python数据类型-字典

    字典(dict) 字典是key:value形式的一种表达形式,例如在Java中有map,JavaScript中的json,Redis中的hash等等这些形式.字典可以存储任意的对象,也可以是不同的数据 ...

随机推荐

  1. 解决gvim中php函数提示php_funclist.dict无法生效的问题

    在Windows中, 当打开php文件时, 提示 dicvim(setlocal) unknown option: Files\Vim\vimfiles\dict\php_funclist.dict ...

  2. Visual Studio 项目模板制作(二)

    上一篇,我们制作了项目模板,本篇我制作项模板 首先,从我们需要导出模板的项目中,文件->导出模板,弹出 导出模板向导 对话框 选择项模板,点击下一步 选择要导出的项,点击下一步 选择要Refer ...

  3. js分号的重要性

    js中语句末尾可以不加分号, 很多时候在做练习或写几个页面时,我都是不会加的.虽然知道加了会好一点.但就是觉得很敲一句就要多按一次分号键(;)来加分号,而不加也不怎么样,然后就不想加了. 也听说在对j ...

  4. javascript版的quine程序-返回自身源码

    引用自Wikipedia: 一个quine是一个计算机程序,它不接受任何输入,且唯一的输出就是自身的源代码. @cowboy (Ben Alman) 给出了一个用JavaScript写的quine程序 ...

  5. ubuntu14.04上 nginx启动停止

    sudo service nginx stop  停止 sudo nginx   启动

  6. python3.7 安装pyopengl,环境搭建

    安装环境:win10 64位操作系统,python3.7 一.安装py库 需要用pip 安装 pip install PyOpenGL PyOpenGL_accelerate 可能会报错, 是因为没有 ...

  7. Qt5.3.2_CentOS6.4_单步调试环境__20160306【勿删,繁琐】

    20160306 全程没有f/q ZC:使用的虚拟机环境是:博客园VMwareSkill 的 “CentOS6.4_x86_120g__20160306.rar” 需要调试器 gdb ,从“http: ...

  8. 合并两个dt

    C#代码中实现两个表(DataTable)的关联查询(JOIN)   之前通常都是使用SQL直接从数据库中取出表1和表2关联查询后的数据,只需要用一个JOIN就可以了,非常方便.近日遇到一种情况,两个 ...

  9. Linux crontab定时执行任务 命令格式与详细例子(转)

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  10. Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...