python基础——字典dict
1.概念:
(1)字典dict,是一系列的键—值对。每个键key都和一个值value相映射。(字典是python中唯一的映射类型。)
(2)每一项item,是一个键值对key—value对。
(3)键key:只能是不可改变的类型,如:数字、字符串、元组;键key不能使用list!!!
(4)值value:可将任何python中的对象,用作字典中的值。
(5)字典为可变类型
(6)无序!!!因为字典只关注key-value的对应关系,不关心顺序。
(7)字典,可以存储一个对象的多种信息,也可以使用字典来存储多个对象的信息。
2.创建字典:
(1)直接创建:
使用{}包含,key和value之间,用冒号“:”分隔,形成一个item,每一个item之间用逗号分隔。
eg: {"key1": "value", "key2": "value2", "key3": "value3"}
(2)使用dict函数:
2.1:列表元素是元组:
dict(列表)
eg:
list1 = [(key1, value1), (key2, value2), (key3,value3)]
dict1 = dict(list1)
2.2:列表元素是列表:
dict(列表)
eg:
list2 = [[key1, value1], [key2, value2], [key3, value3]]
dict2 = dict(list2)
2.3:元组的元素是元组:
dict(元组)
eg:
tuple1 = ((key1, value1), (key2, value2), (key3, value3))
dict3 = dict(tuple1)
2.4:使用等号的形式:
dict4 = dict(key1=value1, key2=value2, key3=value3)
(3)fromkeys(参数A, 参数B):
2.3.1:创建字典,设置value默认值。
2.3.2:参数A:字典的键组成的元组;
参数B:创建的字典的value的默认值
注意:参数A不可使用列表list,因为字典dict中,键key不可改变。
2.3.3:eg:创建一个员工工资信息表,将员工工资默认值设置成3000:
salary_dict = {}.fromkeys(('员工A', '员工B', '员工C'), 3000)
(4)空字典:{}
2.4.1:可以先使用“{}”,定义/创建一个空字典,然后再分行添加各个键值对。
2.4.2:eg:
dict2 = {}
dict2['color'] = 'green'
dict2['points'] = 5
结果:
{'color': 'green', 'points': 5}
2.4.3:什么时候用?
使用字典来存储用户提供的数据;或者在编写能自动生成大量键值对的代码时,都需要先创建一个空字典。
3.访问字典的值:
字典名[键名]
eg:
value1 = dict[key1]
4.添加键值对:
(1)字典名[键] = 值
eg:
dict1[new_key1] = new_value1
(2)注意:
键—值对的排列顺序,与添加顺序不同!
因为:python只关心键和值之间的对应关系,不关心字典键—值对的添加顺序。
5. 修改字典中的值:
(1)要修改字典中的值,可以依次指定:字典名;要修改的值;所对应的键;新值。
(2)eg:
dict1 = {'color': 'green'}
dict1['color'] = 'yellow'
——>{'color': 'yellow'}
6.删除键值对:
(1)使用del语句:
del 字典名[要删除的键]
(2)eg:
del dict1['color']
(3)注意:这样的话,要删除的键值对,就永远消失了。
7.字典操作与方法:
(1)len(dict):
返回,字典dict中项item的数量
(2)xxx in dict:
检查,字典dict中是否含有键xxx的项item
(3)clear():
clear()方法清除字典中的所有项item,返回值为None。
应用:
- 1 >>>x = {}
- 2 >>>y = x
- 3 >>>x['key1'] = 'value1'
- 4 >>>y
- 5 {'key1', 'value1'}
- 6 >>>x = {}
- 7 >>>y
- 8 {'key1', 'value1'}
这是由于:(1)将字典1——空字典的地址,赋值给变量X;(2)将变量X中的地址赋值给变量Y;(3)修改字典1的内容,导致访问X/Y,为字典1的地址,显示字典1修改后的内容;(4)将字典2——空字典的地址赋值给变量X,但是此时变量Y中还是字典1的地址;(5)访问Y,显示字典1
- >>>x = {}
- >>>y = x
- >>>x['key1'] = 'value1'
- >>>y
- {'key1': 'value1'}
- >>>x.clear()
- >>>y
- {}
使用clear()方法进行清空,会清空原始字典中的所有元素。
(4)copy()和deepcopy():
7.4.1:copy():
copy()方法会返回一个具有相同键—值对的新字典,实现的是“浅复制”
注意:当副本中,发生替换值的时候,原始字典不受影响。
当副本中,发生值的增加或者删除的时候,原始字典不受影响。
7.4.2:deepcopy():
深复制——副本和原始字典没关系了
from copy import deepcopy
dict2 = deepcopy(dict1)
(5)get()方法:
1.返回,键对应的值。
2.一般来说,如果,访问字典中不存在的键key时,程序会报错;但是,使用get方法访问字典中不存在的键key时,程序会返回None
3.get(参数1, 参数2)
参数1:字典中,要访问的值value,所对应的键key
参数2:当访问字典中不存在的键key时,程序的自定义返回值,默认值为None
4.eg: >>>dict1 = {}
>>>dict1['key1']
报错,keyerror
>>>dict1.get('key1')
None
>>>dict1.get('key1', 'N/A')
'N/A'
(6)items():
将字典的所有项item,以列表的方式返回,列表中的每一项都是(key,value)的形式。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict1.items()
[('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]
遍历使用:
for key, value in dict1.items():
print(key)
print(value)
(7)keys():
将字典中的所有键key,以列表的方式返回。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict1.keys()
['key1', 'key2', 'key3']
(8)values():
将字典中的所有值value,以列表的方式返回。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict1.values()
['value1', 'value2', 'value3']
注意:返回的值value的列表,可以包含重复的元素!!!(keys返回的列表中没有重复项)
扩展:如何剔除重复项?
A:使用集合set。
集合set类似于列表list,但是每个元素都是唯一的,没有重复项。
如何使用?
A: set(dict1.values())
(9)pop():
pop()方法,获得对应于给定键key的值value,然后将这个key—value对从字典中移除。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict1.pop('key2')
'value2'
>>>dict1
{'key1': 'value1', 'key3': 'value3'}
(10)popitem():
会弹出,字典中随机的一项,类似于list.pop(),但是popitem()弹出的对象不一定是最后一项。
何时使用?
若想一个接一个地删除并处理项,该方法很高效。
(11)setdefault():
类似于get()方法,能够获取并返回,与字典给定键key相关联的值value。
当给定键key,不存在时,setdefault()方法会返回默认值,并添加该项item。其中,默认值可选可设定,默认使用None。
当给定键key,存在时,返回对应的值value,不改变字典。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict1.setdefault('key1')
'value1'
>>>dict1.setdefault('key200')
None
>>>dict1
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key200': None}
>>>dict1.setdefault('name', 'N/A')
'N/A'
>>>dict1
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key200': None, 'name': 'N/A'}
(12)update()方法:
update()方法利用一个字典,更新另外一个字典
注意:提供的字典中的项,会被添加到旧的字典中,若有相同键key,则会进行覆盖。
eg:
>>>dict1 = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
>>>dict2 = {'name': 'value10', 'key2': 'XXXXX'}
>>>dict1.update(dict2)
>>>dict1
{'key1': 'value1', 'key2': 'XXXXX', 'key3': 'value3', 'name': 'value10'}
(13)特殊:
我们已经知道,字典中item是无序的。那么,如果使用sorted对字典进行排序会有什么后果呢?
——A:返回一个有序列表:该列表中的项,都是字典的键key。sorted对字典的key进行了排序
eg:
>>>dict1 = {'E': 'value1', 'C': 'value2', 'A': 'value3', 'B': 'value4'}
>>>sorted(dict1)
['A', 'B', 'C', 'E']
8.格式化输出:
格式: %(key)格式说明符 %字典对象名
9.字典可以作为函数的可变长关键字的参数
python基础——字典dict的更多相关文章
- python基础——字典(dict)
字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 . dict1 = {} ...
- python基础-字典dict
字典-dict 用途: 定义方法:通过{} 来存储数据,通过key:value (键值对)来存储数据,每个键值对通过逗号分隔.在键值对中,key 是不可变的数据类型,value 是任意数据类型 def ...
- Python基础:字典(dict)与集合(set)
查找场景下与列表的性能对比 字典与集合之所以高效的原因是:内部结构都是一张哈希表. 平均情况下插入.查找和删除的时间复杂度为 O(1). 假设有数量100,000的产品列表: import time ...
- python基础之dict、set及字符
python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存 ...
- python基础——使用dict和set
python基础——使用dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其它语言中也称为map(映射),使用键-值(key-value)存储,具 ...
- 第四篇:python基础之dict、set及字符
python基础之dict.set及字符 python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射 ...
- python基础--字典
Python基础--字典 字典的常用函数: dict.clear( )--->无任何返回值 说明: 清除字典内的所有的元素 语法: In [5]: dict.clear? Type: metho ...
- python基础—字典
阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由“键-值”对组成的集合,字典中的“值”通过“键”来引用.这里将介绍字典的定义.访问.排序等功能. 字典的创建 字典 ...
- python基础(六)dict字典和文件操作open
字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...
随机推荐
- 剑指offer17 合并两个排序的链表
错误代码: 最后两个if语句的目的是,最后一次迭代,两个链表中剩下的直接连接最后一次比较的数值,同时也是迭代停止的标志.虽然大if语句中比较大小得到的Node是正确的值,但每次迭代只要pHead2不为 ...
- theano中tensor的构造方法
import theano.tensor as T x = T.scalar('myvar') myvar = 256 print type(x),x,myvar 运行结果: <class 't ...
- Android笔记(预安装APK)
一般一个安卓的产品在出厂时,会预安装许多APK,关于这些APP,主要分为下面这几类 1.系统级别APK 这一类应用一般是:电话/设置或者厂家自己特定的应用. 2.系统预安装APK 因为商业原因,产品出 ...
- 第34章 IWDG—独立看门狗—零死角玩转STM32-F429系列
第34章 IWDG—独立看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- iphone应用程序生命周期浅析
做iphone开发有必要知道iphone程序的生命周期,说白点就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么,只有理解生命周期,有利于我们开发人员开发出更棒的应用 接 ...
- 【Java】重载(Overload)与重写(Override)
方法的语法 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 重载(overload) /** * 重载Overload: * 同一个类中,多个方法 ...
- 【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
◇例题·III◇ 木と整数 / Integers on a Tree 只需要一个美妙的转换,这道题就会变得无比美妙…… 来源:+AtCoder 2148(ARC-063 E)+ ◆ 题目大意 给定一棵 ...
- Java执行存储过程
1.JDBC调用存储过程: CallableStatement /** *p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替 *其余地方写法固定 */ CallableStateme ...
- php精华之独孤九剑
首先分享一个地址 https://segmentfault.com/a/1190000013696265(这个是主要的分享,人家作者写的非常棒
- elasticsearch 5.x 系列之二 线程池的设置
1,概述 每个Elasticsearch节点内部都维护着多个线程池,如index.search.get.bulk等,用户可以修改线程池的类型和大小,以及其他的比如reflesh, flush,warm ...