Python基本数据类型——字典
字典 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有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而增加;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,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基本数据类型——字典的更多相关文章
- Python基础数据类型-字典(dict)
Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...
- python初识数据类型(字典、集合、元组、布尔)与运算符
目录 python数据类型(dict.tuple.set.bool) 字典 集合 元组 布尔值 用户交互与输出 获取用户输入 输出信息 格式化输出 基本运算符 算术运算符 比较运算符 逻辑运算符 赋值 ...
- Python 数据类型--字典类型
字典 dict 字典是Python的另一种有序的可变数据结构,且可存储任意类型对象. 字典是一种键值对的数据容器,每个键值(key:value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典 ...
- Python基本数据类型--列表、元组、字典、集合
一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...
- python基本数据类型之字典
python基本数据类型之字典 python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下: d = {'Bart': 95, 'Michael': 34, 'Lisa': 5 ...
- python的6种基本数据类型--字典
python的6种基本数据类型--字典 字典 字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号":& ...
- Python的数据类型3元组,集合和字典
首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面元组又比不上列表 定义一个元组,你可以不用加‘ [ ] ’,你只需用逗号隔开即可 例如 1 2 3 4 5 6 7 ...
- Python - 基本数据类型及其常用的方法之字典和布尔值
字典 特点:{"key1": value1, "key2":value2} , 键值对中的值可以为任何数据类型,键不能为列表.字典(无法哈希),布尔值可以为键 ...
- Python数据类型--字典(dict)
Python中的字典是键值对(key-value)的无序集合.每个元素包含"键"和"值"两部分,这两部分之间使用冒号分隔,表示一种对应关系.不同元素之间用逗号分 ...
随机推荐
- [django]session设置与获取原理
admin登录 情况1: 登录后会产生一个sessionid 情况2: 自定义设置了key后,会多一个sessionid, 登录后会替换为登录后的sessionid的key值 if username ...
- Django 框架 django的请求生命周期
概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...
- Java后台+数据库+Java web前端(新手)
实现简单页面上对数据的增删改查:Java后台+数据库表+Jsp前端网页设计 这里做一个简单的学生课程信息管理系统,做之前一定要先有自己的思路,要不然对新手来说,很容易乱的. 另有一完整的代码可供参考, ...
- 调试https接口
1. wireshark的 pre master key只能使用在浏览器上,现在mac电脑不支持chrome,只有firefox才有SSL的日志提供给wireshark. 2. wirshark不能解 ...
- .NET拾忆:FormData文件上传
方法1.FormData简单实现 后端: using System; using System.Collections.Generic; using System.IO; using System.L ...
- spring 对jdbc的简化
spring.xml <!-- 加载属性配置文件 --> <util:properties id="db" location="classpath:db ...
- UML学习笔记(五)--顺序图
顺序图是用来描述对象自身及对象间信息传递顺序的视图.它用来表示用例中的行为顺序.当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件.它着重显示了参与相互作用的对象和所 ...
- obv15 实例6:如果K线柱过多,ZIG将发生变动,导致明显的OBV15指标被隐藏!
obv
- Javascript-数据类型转换 、 运算符和表达式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#6.0中10大新特性的应用和总结
微软发布C#6.0.VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家. 微软于2015年7月21日发布了Visual Studio 20 ...