Python散列类型(1)

简介: 【10月更文挑战第9天】

【10月更文挑战第9天】

思考:如果有多个数据,例如:“凯子”,“男”,19,如何快速存储这些数据

多数我们是通过列表进行存储的

li=['凯子','男',19]

在定义完这个列表之后我们如何来找到数据'凯子'呢?

我们可以通过索引

print(li[0])

如果将来数据顺序发生改变的话,还能用索引值进行访问吗

答案是不能的

数据顺序发生变化,每个数据的下标也随之变化,如何保证数据顺序变化前后能使用同一种方法查找数据呢?

那么这里就涉及到了字典

字典的定义

定义:{‘键’:'值',‘键’:'值'}

1.字典的数据,都是以键值对的方式----键和值都要成对出现

2.键值对之间用逗号隔开

字典的定义:

d={'name':'凯子','age':19,'sex':'男'}
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男'}
print(type(d))
#<class 'dict'>

获取字典内值的方式:字典[键]

#上面已经将字典定义好了,但是我们现在怎么进行拿值的操作呢?

#获取值---字典[键]:
#序列类型是有顺序的,散列类型是没有顺序的
#字典也是没有顺序的,如果想访问值的话,我们是需要通过键进行获取的
print(d['name'])
#凯子

#我们将顺序进行改变的话我们仍然能进行访问

序列类型是有顺序的,散列类型是没有顺序的

字典也是没有顺序的,如果想访问值的话,我们是需要通过键进行获取的

在字典之内不管顺序怎么变我们都能通过键进行访问

字典注意事项

键必须是唯一的

#键必须是唯一的
d={'name': '凯子', 'age': 19, 'sex': '男',"name":"小明"}
print(d)
#{'name': '小明', 'age': 19, 'sex': '男'}
#之前定义的凯子就被这个小明给替换掉了

#如果在字典里面出现重复的键,那么前面的键值对会被后面的键值对给替换掉
'''
因为我们之前就说明了
在字典中对数值的访问我们只能通过键
那么现在有两个一样的键,那么我们是不知道访问谁的
所以在字典中键必须是唯一的

如果同时出现一样的键,那么前面的键值对会被后面键值对提坏

如果确实要定义两个名字的话,我们可以在name后面加上数字进行区分
'''

如果在字典里面出现重复的键,那么前面的键值对会被后面的键值对给替换掉

最好的解决方法就是在键后面加上数字进行区分

键值对必须成对出现,不然就会报错

字典中的键,只能是不可以修改的类型(字符串、元组、数字)

所以我们是不能用列表作为键

字典的操作方式---增删改查

1.获取值---字典[键]:获取对应键的值


#获取小明这个值
#字典[键]
print(d['name'])

2.修改值---字典[键]=新值

d={'name':'凯子','age':19,'sex':'男'}
d['name']="小红"
print(d)
#{'name': '小红', 'age': 19, 'sex': '男'}

3.添加键值对---字典[新键]=新值

d['name3']='小兰'
print(d)
#{'name': '小红', 'age': 19, 'sex': '男', 'name3': '小兰'}

字典[键]=新值

对于这个,键存在,那么就是对这个键指向的值进行修改

如果不存在的话,就是新添加一个新的键以及这个键指向的新值

4.获取字典中的值的方式

1.1字典[键]:获取对应键的值

1.2字典.get(键,键不存在的提示)

print(d.get('name'))
#小红
print(d.get('age'))
#19

print(d.get('age1'))
#None
'''
这种方式就会进行一个提示,如果我们输入的键是不存在的话
那么就会提示我们None,说明字典里面并没有这个键
'''


#除此之外,我们是可以自己设置这个提示,提醒我们这个键不存在
print(d.get('age1','键不存在'))
#键不存在

我们可以在这个get函数进行键对应值的查找,并且我们还能判断键是否存在

可以对键不存在的信息进行设置

5.setdefault(键,值)---键存在,返回对应的值

键不存在就会将键值对进行添加

d={'name':'凯子','age':19,'sex':'男'}
print(d.setdefault('name5','kk'))
print(d)

#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#这里的name5就是不存在的键
#通过这种方法我们直接将这个键放到字典中

print(d.setdefault('name5','55'))
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#r如果我们输入的键是存在的话,那么我们就不进行额外的操作了

如果我们输入的键是存在的话,那么我们就不进行额外的操作了

如果我们输入的键是不存在的话,那么我们就在这个字典中添加这个键以及这个键对应的值

但是如果存在的话,我们是不进行额外的操作的

我们仅仅只需要进行键对应的值的打印

setdefault返回的一般是键对应的值

字典.setdefault(键,’数据‘)

小回顾:

#当前字典里面有三对键值对
#键和值之间的分割符是冒号
#键值对之间的分隔符是逗号
#用花括号将所有的键值对进行包裹
d={'name':"小明",'age':18,'sex':'男'}


#获取小明这个值
#字典[键]
print(d['name'])

#修改值---字典[键]=新值
d['name']="小红"
print(d)


#添加值--字典[新键]=新值
d['name1']="小工"
print(d)

#这个name1这个键是之前没出现过的
#所以编译器会将这个键和其对应的值会作为键值对添加到字典中



print(d.get('name'))
#小红

#如果不存在我们想寻找的键值对的话,那么编译器会通过这个函数将这个键值对添加到字典之中
print(d.setdefault('name5',"kaizi"))

print(d)

print(d.setdefault('name'))
#如果这个键存在的话,那么setdefault就会返回这个键对应的值

6.update()---添加多个键值对

字典.update(字典)

update添加多个键值对的使用方法:

#{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}
#在原有的字典中添加键值对
d.update({'name2':"小李",'age2':'15'})
print(d)
'''
{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'}
'''
#这个就是在update的括号内添加一个字典

7.pop(键)---删除指定的键值对

#{'name': '小红', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}
#删除小红
d.pop('name')
print(d)
'''
{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'}

'''

#在列表中对元素进行删除的时候使用pop我们在括号内不输入元素的索引值
#那么默认就是删除最后一个元素
#但是现在我们这里的字典的话使用删除的方法的时候我们一定要在括号内加上要删除的键值对的键

在列表中对元素进行删除的时候使用pop我们在括号内不输入元素的索引值

那么默认就是删除最后一个元素

但是现在我们这里的字典的话使用删除的方法的时候我们一定要在括号内加上要删除的键值对的键

pop的内容里面必须要有内容,没有内容的话就是会报错的

8.poptiem()---删除最后一个键值对

d.popitem()
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李'}
d.popitem()
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'}

#返回关键字和值构成的元组

print(d.popitem())
#('name5', 'kaizi')
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工'}
print(d.popitem())
#('name1', '小工')

#返回的值就是要删除的键值对组成的元组
#返回关键字和值构成的元组

print(d.popitem())
#('name5', 'kaizi')
print(d)
#{'age': 18, 'sex': '男', 'name1': '小工'}
print(d.popitem())
#('name1', '小工')

#返回的值就是要删除的键值对组成的元组

9.values()获取字典中所有的值

字典.values()

d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.values())
#dict_values(['小明', 18, '男', '小红'])
for i in d.values():
    print(i)

'''
小明
18
男
小红

对于这个循环的写法,我们编译器会先执行这个d.values的方法,
print(d.values())
#dict_values(['小明', 18, '男', '小红'])
获取到字典中的值
这些值都被存在一个列表中
然后我们i遍历这个列表打印每一个值
'''

我们将d.values写到for循环的条件中

我们先进行d.values的编译,然后生成了一个列表,这个列表里面存着的就是这个字典里面的数据

然后i进行这个列表的遍历,然后进行数据的打印

10.keys()---获取字典中所有的键

d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.keys())
#dict_keys(['name', 'age', 'sex', 'name1'])
#同样,获取的键也会存在列表中
#那么我们也可以同样利用for循环遍历这个链表进行键的打印

for i in d.keys():
    print(i)

'''
name
age
sex
name1

'''

将获取的键存在列表中,利用for循环进行遍历列表,打印每一个键

11.items()---获取字典中所有的键值对

#利用items就能获取这个字典内的键值对,得到的键值对会被存在列表中
#每一个键值对在列表中存在的元素是元组形式的
d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
'''
dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
'''

#我们从这个存储键值对的列表中进行遍历,打印每一个键值对

for i in d.items():
    print(i)
'''
('name', '小明')
('age', 18)
('sex', '男')
('name1', '小红')
'''

用键:值这个格式将字典内的键值对表示出来

因为我们使用items获取到的键值对是以元组形式存进这个列表的

那么我们随着i的变化就能进行列表中所有键值对的访问,也就是对元组的访问

那么我们是可以通过索引值访问元组内的元素的

这个元组内的元素下标为0就是键,1就是键指向的数据

那么我们就可以利用循环将这个格式进行输出

利用索引值将键值队的格式表现出来:

#键值对存在列表中
#对于这个循环来说,i存放的数据是键值对的数据,键值对输出的格式是---键:值
#因为键值对存在列表中,所以我们是可以用下标进行访问的

d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
#dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
for i in d.items():
    #print(i)
    #通过索引的方式将键和值单独的获取
    #键值对在这个列表中存在的形式是元组
    #通过i的变化,我们访问每一个键值对
    #那么我们就可以用i+索引进行元组内元素的访问的操作了
    print(i[0])#访问的是键
    print(i[1])#访问的是值

    print(f'{i[0]}:{i[1]}')
'''
那么我们通过循环就打印出这么个样子
name:小明
age:18
sex:男
name1:小红

和我们预期的是一样的
'''

除了使用索引,我们还能使用拆包的方法

回顾一下什么事拆包

元组可以同时赋值给多个变量,只要变量个数不超过元组长度,变量前面加上* 号则可以将多于元素都接受,并组成一个列表

d={'name':"小明",'age':18,'sex':'男',"name1":"小红"}
print(d.items())
#dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小红')])
for i in d.items():
    a,b=i
##    print(a)
##    print(b)
    print(f'{a}:{b}')
'''
随着i的遍历,每次都指向着不同的元组,就是指向不同的键值对
那么所以说i种存在两个值,就是键和键指向的值
那么我们就利用元组的拆包的操作
将键值对这两个值存在我们创建的两个变量中
a就是存储键
b就是存储值了
那么我们利用循环,i遍历整个列表我们将整个列表中的元素都进行打印了
'''
#两种方法都能实现我们想要的效果
'''
name:小明
age:18
sex:男
name1:小红

'''
相关文章
|
6天前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
26 0
|
6天前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
41 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
6天前
|
Python
【10月更文挑战第6天】「Mac上学Python 10」基础篇4 - 布尔类型详解
本篇将详细介绍Python中的布尔类型及其应用,包括布尔值、逻辑运算、关系运算符以及零值的概念。布尔类型是Python中的一种基本数据类型,广泛应用于条件判断和逻辑运算中,通过本篇的学习,用户将掌握如何使用布尔类型进行逻辑操作和条件判断。
40 1
【10月更文挑战第6天】「Mac上学Python 10」基础篇4 - 布尔类型详解
|
2天前
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
Python 序列类型(2)
|
3天前
|
存储 C++ 索引
Python 序列类型(1)
【10月更文挑战第8天】
|
11天前
|
存储 Java Apache
Python Number类型详解!
本文详细介绍了 Python 中的数字类型,包括整数(int)、浮点数(float)和复数(complex),并通过示例展示了各种算术操作及其类型转换方法。Python 的 `int` 类型支持任意大小的整数,`float` 类型用于表示实数,而 `complex` 类型用于表示复数。此外,文章还对比了 Python 和 Java 在数字类型处理上的区别,如整数类型、浮点数类型、复数类型及高精度类型,并介绍了各自类型转换的方法。尽管两种语言在语法上有所差异,但其底层逻辑是相通的。通过本文,读者可以更好地理解 Python 的数字类型及其应用场景。
23 2
|
14天前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
18 3
|
13天前
|
存储 缓存 算法
详解 PyTypeObject,Python 类型对象的载体
详解 PyTypeObject,Python 类型对象的载体
18 3
|
11天前
|
Java 程序员 C++
【Python】动态类型、输入和输出、条件语句
【Python】动态类型、输入和输出、条件语句
18 0
|
4天前
|
存储 程序员 开发者
Python编程基础:从入门到实践
【10月更文挑战第8天】在本文中,我们将一起探索Python编程的奇妙世界。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息。我们将从Python的基本概念开始,然后逐步深入到更复杂的主题,如数据结构、函数和类。最后,我们将通过一些实际的代码示例来巩固我们的知识。让我们一起开始这段Python编程之旅吧!