『Python基础-10』字典
『Python基础-10』字典
目录:
1.字典基本概念
2.字典键(key)的特性
3.字典的创建
4-7.字典的增删改查
8.遍历字典
1. 字典的基本概念
- 字典一种key - value 的数据类型
- Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
- Python字典可存储任意类型对象,如字符串、数字、元组、列表…… 优点:取值方便,速度快
- 每个键与其值使用一个冒号
(key:value; key:value; .......)
分开,这些键-值对是使用逗号分隔的,整个字典项目用大括号括起来。 - 空字典: 没有任何项目的空字典只用两个花括号写成:{}
- 键在字典中是唯一的,而值可以不必是唯一的。字典的值可以是任何类型的,但是键必须是不可变的数据类型,例如字符串,数字或元组。
2.字典键的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
dict1 = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
print ("dict1['Name']: ", dict1['Name'])
输出结果:dict1['Name']: Manni
2)键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行,如下实例:
dict1 = {['Name']: 'Zara', 'Age': 7};
print ("dict1['Name']: ", dict1['Name'])
输出结果:dict1 = {['Name']: 'Zara', 'Age': 7}; TypeError: unhashable type: 'list'
unhashable,不可哈希, 如果我们简单点理解,某数据“不可哈希”(unhashable)就是其可变,如list/dict,都能原地修改,就是unhashable。可改变的数据结构 :字典dict,列表list,集合set. 字典也被称作关联数组或哈希表.
3. 创建字典
3.1) 直接赋值创建
字典由键(key)和对应值(value)成对组成。字典也被称作关联数组或哈希表。基本语法如下:
dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} #创建字典dict1
创建空字典:
使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先 定义一个空字典:
dict1 = {}
注意:
-每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。
-键必须独一无二,但值则不必。
-值可以取任何数据类型,但必须是不可变的,如字符串,数组或元组。
3.2) 通过关键字dict
和关键字参数创建
Python里有一个内建关键字dict
, 可以直接使用这个关键字创建字典.
StuIfo = dict(name = "xiao ming",age = 12)
print(StuIfo,type(StuIfo))
运行结果:{'name': 'xiao ming', 'age': 12} <class 'dict'>
3.3) 通过二元组列表创建
list1 = [('Iphone',6999),('xiaomi',1999)]
phoneprice = dict(list1)
print(list1)
print(phoneprice,type(phoneprice))
运行结果:
[('Iphone', 6999), ('xiaomi', 1999)]
{'Iphone': 6999, 'xiaomi': 1999} <class 'dict'>
3.4) 通过dict和zip结合创建
dict3 = dict(zip('python',[1,2,3,4,5,6]))
print(dict3,type(dict))
运行结果:
{'p': 1, 'y': 2, 't': 3, 'h': 4, 'o': 5, 'n': 6} <class 'type'>
zip函数可以把两个对象结合在一起
4. 增: 给字典增加元素
4.1) 直接赋值来增加元素
字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用 方括号括起的键和相关联的值。
格式: 字典变量名['键(key)'] = 数据(value)
dict1 = {'color': 'green', 'points': 5} #原列表
dict1['x_position'] = 0 #添加键值对:'x_position': 0
dict1['y_position'] = 55 #添加键值对: 'y_position': 55
print(dict1)
运行结果:{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 55}
[注意]:键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序, 而只关心键和值之间的关联关系。
4.2) 用方法.update
添加合并两个
利用一个字典项更新另一个字典。将一个字典里的项添加到另一个字典里,若两个字典里有相同的键,则更新其键对应的值。
语句:dict1.update(dict2)
dict4 = {"name":"xiao hong","age":12}
dict5 = {"class":1, "grade":3}
dict4.update(dict5)
print(dict4)
print(dict5)
运行结果:
{'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
{'class': 1, 'grade': 3} # 这个字典还是存在的
5. 删: 删除字典元素或字典
可以删除单个字典元素或清除字典的全部内容。也可以在单个操作中删除整个字典。
5.1) 使用del语句
删除元素,或整个字典
要显式的删除某个元素或整个字典,只需使用del语句。
使用del语句后,再访问被删除的元素或字典,引发一个异常,因为用del后该元素或字典不再存在:
dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
del dict1['speed']
print(dict1['speed']) #运行后报错:KeyError: 'speed'
print(dict1)
dict2 = {"name":"xiao hong","age":12}
del dict2
print(dict2) #运行后报错:NameError: name 'dict2' is not defined
运行结果:
KeyError: 'speed'
{'x_position': 0, 'y_position': 25}
NameError: name 'dict2' is not defined
5.2) 使用方法.clear()
清空字典
移除字典里所有 items 。不接受任何参数,返回值为 None 。
再访问清空后的字典,会返回空字典.
使用 : 字典名.clear()
dict2 = {"name":"xiao hong","age":12}
result = dict2.clear()
print(result) #返回none
print(dict2) #返回空字典
运行结果:
None
{}
5.3) 使用方法.pop
来删除指定元素, 会返回被删除的key所对应的值.
移除字典数据pop()方法的作用是:删除指定给定键所对应的值,返回这个值并从字典中把它移除。
若指定键不存在,一种情况程序会报错,另一种情况可以指定一个值作为返回值。
[注意]字典pop()方法与列表pop()方法作用完全不同。
dict2 = {"name":"xiao hong","age":12,'class': 1, 'grade': 3}
result1 = dict2.pop("age") #返回被删除的,age对应的值12
result2 = dict2.pop("age") #再次调用上次被pop删除的键值对, 直接打印输出,会报错. 运行后: result2 = dict2.pop("age"),KeyError: 'age'
result3 = dict2.pop("age","key didn't found") # 在指定key后,再指定一个该key不存在时的返回值,会返回这个设定值. 运行后:key didn't found
print(result1)
print(result2)
print(result3)
print(dict2)
运行结果:
12 #print(result1)
result2 = dict2.pop("age"),KeyError: 'age' #print(result2)
key didn't found #print(result3)
{'name': 'xiao hong', 'class': 1, 'grade': 3} #print(dict2)
5.4) 使用popitem()方法
随机抛出一对键值对,并返回值. 不接受任何参数.
Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
与列表的 pop 方法类似,但与之不同的是,由于字典是无序的,故是随机以(键,值)的形式抛出,并且返回(键,值)。不接受任何参数。
如果字典已经为空,却调用了此方法,就报出KeyError异常。
dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
result1 = dict1.popitem()
print(result1)
运行结果:('speed', 'medium')
6. 改: 修改字典内的元素
- 通过关键字访问对应的值,然后重新赋值, 即为修改字典元素.
- 字典是可变对象,支持原处修改,也就是ID不变
dict4 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
dict4['class']=2 #更改键值对class:1为class:2
print(dict4)
运行结果:
{'name': 'xiao hong', 'age': 12, 'class': 2, 'grade': 3}
7. 查: 查询(访问)字典
- Python内置的字典类型,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
- 字典可以像列表使用索引一样访问,但是字典使用的键,而非索引, 字典没有索引
- 字典是可变对象,支持原处修改,也就是ID不变
dict1 = {'Name': 'Zara', 'Age': 7, `Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
运行结果:
dict['Name']: Zara
dict['Age']: 7
[注意]如果用字典里没有的键访问数据,会报错. 可以使用.get方法
,不会报错,会返回None,也可以指定返回值
8. 遍历字典
8.1) 遍历字典,只取[key]
for循环字典,默认遍历的是字典的key:
dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
for i in dict1:
print(i)
运行结果是:
name age class grade
也可以通过内置方法
.keys()
来遍历字典,遍历字典里所有的key.dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
for key in dict1.keys():
print(key)
运行结果同上.
8.2) 遍历字典, 只取[value]
- 遍历所有的value值,需要使用Python的内置方法
.values()
dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
for x in dict1.values():
print(x)
运行结果:xiao hong 12 1 3
8.3) 遍历字典, [key]值和[value]值都取
- 1.先使用方法
.items()
获取一个列表,这个列表内的放的元素,存的是元祖形式的原字典的键值对. - 2.遍历这个列表,拿到可字典的key和value
dict1 = {'name': 'xiao hong', 'age': 12, 'class': 1, 'grade': 3}
result = dict1.items()
#print(result) #print(result)运行结果:dict_items([('name', 'xiao hong'), ('age', 12), ('class', 1), ('grade', 3)])
for key,value in result: #key接收元祖里的第一个值,value接收元祖例的第二个值
print(key,value)
8.4) 利用enumerate
和下标控制遍历
enumerate()是python的内置函数,在字典上是枚举、列举的意思
enumerate可以获取遍历每一项的下标
这样我们可以控制我遍历过程,可能有的时候不需要全遍历,可以利用它中断遍历
dict1 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
for index, key in enumerate(dict1):
if index == 2:
break
print(key) print("-------这是一条分隔线-----------------") for index,value in enumerate(dict1.values()): #遍历字典的value
print(index,value) #获取位置下标和字典的value值运行结果:
x_position
y_position
-------这是一条分隔线-----------------
0 0
1 25
2 medium
------------Python内置字典函数功能------------
编号 | 函数 | 描述 |
---|---|---|
1 | cmp(dict1, dict2) | 在Python 3中不再可用。 |
2 | len(dict) | 计算出字典的总长度。它将等于字典中的数据项数目。 |
3 | str(dict) | 生成字典的可打印字符串表示形式 |
4 | type(variable) | 返回传递变量的类型。如果传递变量是字典,那么它将返回一个字典类型。 |
------------Python内置字典方法------------
python 3.x 中字典的方法一共 11 种,用命令 dir(dict)
查看。每种方法的使用也可用 help(dict.clear)
查看。
编号 | 函数 | 描述 |
---|---|---|
1 | dict.clear() | 删除字典dict的所有元素 |
2 | dict.copy() | 返回字典dict的浅拷贝 |
3 | dict.fromkeys() | 创建一个新的字典,其中包含seq的值和设置为value的值。 |
4 | dict.get(key, default=None) | 对于键(key)存在则返回其对应值,如果键不在字典中,则返回默认值 |
5 | dict.has_key(key) | 此方法已删除,使用in操作符代替 |
6 | dict.items() | 返回字典dict的(key,value)元组对的列表 |
7 | dict.keys() | 返回字典dict的键列表 |
8 | dict.setdefault (key, default = None) | 类似于get(),如果key不在字典dict中,则将执行赋值操作:dict [key] = default |
9 | dict.update(dict2) | 将字典dict2的键值对添加到字典dict |
10 | dict.values() | 返回字典dict的值列表 |
[参考]:
- 书: <<Python编程: 从入门到实践>>
- 廖雪峰老师的Python教程
- 脚本之家_Python 字典(Dictionary)操作详解
- 传智博客讲义
[扩展阅读]:
谢谢阅读!(#.#)
『Python基础-10』字典的更多相关文章
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
# 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...
- 『Python基础-7』for循环 & while循环
『Python基础-7』for循环 & while循环 目录: 循环语句 for循环 while循环 循环的控制语句: break,continue,pass for...else 和 whi ...
- 『Python基础-11』集合 (set)
# 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...
- 『Python基础-8』列表
『Python基础-8』列表 1. 列表的基本概念 列表让你能够在一个地方存储成组的信息,其中可以只包含几个 元素,也可以包含数百万个元素. 列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...
- 『Python基础-6』if语句, if-else语句
# 『Python基础-6』if语句, if-else语句 目录: 条件测试 if语句 if-else语句 1. 条件测试 每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为 ...
- 『Python基础-5』数字,运算,转换
『Python基础-5』数字,运算,转换 目录 基本的数字类型 二进制,八进制,十六进制 数字类型间的转换 数字运算 1. 数字类型 Python 数字数据类型用于存储数学上的值,比如整数.浮点数.复 ...
- 『Python基础-4』字符串
# 『Python基础-4』字符串 目录 1.什么是字符串 2.修改字符串 2.1 修改字符串大小 2.2 合并(拼接)字符串 2.3 使用乘号'*'来实现字符串的叠加效果. 2.4 在字符串中添加空 ...
- 『Python基础-3』变量、定义变量、变量类型、关键字Python基础-3』变量、定义变量、变量类型、关键字
『Python基础-3』变量.定义变量.变量类型.关键字 目录: 1.Python变量.变量的命名 2.变量的类型(Python数据类型) 3.Python关键字 1. Python 变量.变量的命名 ...
- 『Python基础-1 』 编程语言Python的基础背景知识
#『Python基础-1 』 编程语言Python的基础背景知识 目录: 1.编程语言 1.1 什么是编程语言 1.2 编程语言的种类 1.3 常见的编程语言 1.4 编译型语言和解释型语言的对比 2 ...
随机推荐
- MongoDB安装步骤
安装C:\Users\Administrator>d:\mongo\bin\mongod -dbpath=D:\ND.Monodb\ND.Monodb.db -logpath=D:\ND.Mon ...
- 大数据学习---大数据的学习【all】
大数据介绍 什么是大数据以及有什么特点 大数据:是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合. 大数据是一种方法论:“一切都被记录,一切都被数字化,从数据中寻找需求,寻找知 ...
- Eclipse启动JVM机制
1.Eclipse启动的时候,会启动一个JVM来运行eclipse(因为Eclipse是Java代码实现的) 2.Eclipse启动一个带main的主类的时候,会单独启动一个JVM来运行他. 3.Ec ...
- np.arrange用法
np.arange()经常用,其用法总结如下: np.arange(0,60,2) 生成从0到60的步距为2的数组,其中0为初始值,60为终值,2步距, np.arange(60) 生成从0到59的默 ...
- 学习Road map Part 03 编程和算法
方法: 优先重复已学过的内容 写学习笔记
- vs中ctrl+w选中智能感应的整个单词
vs中ctrl+w选中智能感应的整个单词
- Vue-Resource请求PHP数据失败的原因
在写一个Vue项目的时候发现在使用Vue-Resource的post方法请求PHP数据时,完全没有反应,查阅资料才知道没有加配置参数: { emulateJSON:true } 这个配置参数的意思是: ...
- TCP建立连接和释放连接过程
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP建立连接需要三次握手,释放连接需要四次握手. 1.TCP整 ...
- PHP---练习-----留言板
题目::留言显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- 7.spring:SpringAOP(配置文件)
SpringAOP(xml文件配置) 配置文件的方式,主要是在xml文件中进行配置,不使用注解! 目录: AtithmeticCalculator.java public interface Atit ...