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:小红

'''
目录
相关文章
|
4月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
343 1
|
5月前
|
IDE 开发工具 开发者
Python类型注解:提升代码可读性与健壮性
Python类型注解:提升代码可读性与健壮性
321 102
|
10月前
|
索引 Python
Python的变量和简单类型
本文介绍了Python中变量命名规则、常用变量类型及字符串操作。变量命名需遵循字母、数字和下划线组合,不能以数字开头且不可与关键字冲突。字符串支持单引号、双引号或三引号定义,涵盖基本输出、转义字符、索引、拼接等操作。此外,还详细解析了字符串方法如`islower()`、`upper()`、`count()`等,帮助理解字符串处理技巧。
277 15
|
6月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
667 3
|
6月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
232 0
|
6月前
|
IDE API 开发工具
Python类型注解:让代码“开口说话”的隐形助手
Python类型注解为动态语言增添类型信息,提升代码可读性与健壮性。通过变量、函数参数及返回值的类型标注,配合工具如mypy、IDE智能提示,可提前发现类型错误,降低调试与协作成本。本文详解类型注解的实战技巧、生态支持及最佳实践,助你写出更高质量的Python代码。
273 0
|
9月前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
211 26
|
9月前
|
人工智能 安全 IDE
Python 的类型安全是如何实现的?
本文探讨了 Python 的类型安全实现方式。从 3.5 版本起,Python 引入类型提示(Type Hints),结合静态检查工具(如 mypy)和运行时验证库(如 pydantic),增强类型安全性。类型提示仅用于开发阶段的静态分析,不影响运行时行为,支持渐进式类型化,保留动态语言灵活性。泛型机制进一步提升通用代码的类型安全性。总结而言,Python 的类型系统是动态且可选的,兼顾灵活性与安全性,符合“显式优于隐式”的设计哲学。
220 2
|
11月前
|
Python Windows
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
419 11
|
11月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
277 1

推荐镜像

更多