代码编织梦想

前言

上一篇文章 python学习——【第五弹】中我们了解了python中的不可变序列元组,这篇文章接着介绍可变序列 字典。

字典

字典的实现原理: 字典,顾名思义其实现原理和字典类似,字典中的元素都是key—value,以键值对的方式存储数据,因此python中的字典可以根据key来查找value的位置。并且字典中的key是唯一的不允许重复,但value是可以重复的。

字典的特点

1:字典是python的内置数据结构之一,是可变序列,并且可以任意嵌套,在原处的增删改等操作不会影响其id地址

2:字典属于无序序列,其每一项都是从左到右随机排序的,即保存在字典中的项是没有固定顺序的,因此无法在字典中指定位置插入元素

3:字典中的key必须是不可变对象,如字符串,元组,数值

4:字典也可以根据需要进行动态伸缩,但会浪费较大的内存,是一种空间换时间的数据结构

创建方式

1:创建字典最常用的方式就是使用花括号:
dict_name = {‘key_1’: ‘value_1’, ‘key_2’: ‘value_2’}

2:使用内置函数dict():
dict_name = dict(‘key_1’=‘value_1’, ‘key_2’=‘value_2’)

使用花括号创建字典:

scores={'join':100,'lisa':102,'tom':99}  #不使用内置函数dict()创建字典时,如果使用字符串作为键,需要在字符串两端加引号
print(scores,type(scores))
#{'join': 100, 'lisa': 102, 'tom': 99} <class 'dict'>

使用内置函数dict()创建字典:

scores1=dict(name='tom',age=20)   
print(scores1,type(scores1))
#{'name': 'tom', 'age': 20} <class 'dict'>

使用内置函数dict()创建字典时,若字符串作为键,不可在两端加引号。

在这里插入图片描述
空字典的创建:

list1=[1,2,3,4]
dict1={}
dict2=dict()
dict3=dict.fromkeys(list1)
#使用fromkeys()函数需要传入一个列表,使其中元素作为新字典的键,由于没有传值,因此字典值为空。
print(dict1,type(dict1),dict1.values())#{} <class 'dict'> dict_values([])
print(dict2,type(dict2))#{} <class 'dict'>
print(dict3,type(dict3),dict3.values())#{1: None, 2: None, 3: None, 4: None} <class 'dict'> dict_values([None, None, None, None])
any()可以检查字典的值是否为空,为空返回False
print(any(dict1.values()))# False
print(any(dict3.values()))# False

使用元组和列表创建字典:

yuanzu=(11,'aa',22,'bb')
list1=['cc',33,'dd',55]
new_dict={yuanzu:list1} 
print('元组和列表创建字典:', new_dict,type(new_dict))
#元组和列表创建字典: {(11, 'aa', 22, 'bb'): ['cc', 33, 'dd', 55]} <class 'dict'>

注意要将元组作为键,列表作为值才能创建字典;若将列表作为键,元组作为值会抛出TypeError的错误,因为字典中的key必须是不可变对象,如字符串,元组,数值

如果想让两个列表创建字典,需要借助zip()函数
使用zip()函数:

items = ['aiai', 'lili', 'nini']  
prices = [10, 20, 30]
d = {item: price for item, price in zip(items, prices)}
print(d, type(d))  # {'aiai': 10, 'lili': 20, 'nini': 30} <class 'dict'>
c = {item.upper(): price for item, price in zip(items, prices)}
print(c, type(c))  # {'AIAI': 10, 'LILI': 20, 'NINI': 30} <class 'dict'>

或者是直接使用新生成的zip对象生成字典

zip( ) 函数的第一个参数形成了字典中的键 (key),第二个参数形成了字典中的值 (value)。若zip( )中两列表长度不相同,则返回对象与最短列表的长度相同

list1=[1, 2, 3, 4]
list2=['a', 'b', 'c', 'd','p']
new_list=zip(list1, list2)#将list1和list2拼接后转换成zip对象
dictionary=dict(new_list)#将zip对象转换成字典
print(dictionary, type(dictionary))  # {1: 'a', 2: 'b', 3: 'c', 4: 'd'} <class 'dict'>

字典元素获取方式

​1: []方法 举例: dict_name[‘key’]

2: get()方法 举例: dict_name.get(‘key’)

两者取值的区别

[]方法:如果字典中不存在指定的key, 抛出keyError异常

get()方法:如果字典中不存在指定的key,
不会抛出keyError的异常,而是返回None,并且可以通过参数设置默认的value,以便指定的key不存在时返回​。

scores={'join':100,'lisa':102,'tom':99}
# print('scores中的om:',scores['om']) # scores['om']  输出 KeyError: 'om'
print('scores中的tom:',scores['tom'])  #scores中的tom: 99
print('scores中的susan:',scores.get('susan'))  # None
print('scores中不存在的元素:',scores.get('lili',99))  #输出99  在字典中所在位置查找的元素不存在时默认输出指定位置的索引

字典中的key

key的判断:

in --》‘kay’ in dict_name —》 指定的key在字典中返回True,不存在返回False

not in —》‘kay’ not in dict_name --》指定的key在字典中不存在返回True,存在返回False

dire1={'lili':1,'kaka':23,'lala':99,'didi':10}
print('lili' in dire1)  #True
print('lili' not in dire1) #False

获取字典中的键、值

dire1={'lili':10,'lisa':11,'kaka':12}
key1=dire1.keys()
print(key1) #dict_keys(['lili', 'lisa', 'kaka'])
print(type(key1)) # <class 'dict_keys'>
print(list(key1))  #将所有的key组成的视图转成列表  ['lili', 'lisa', 'kaka']
print(tuple(key1)) #将所有的key组成的视图转成元组  ('lili', 'lisa', 'kaka')
print(set(key1))#将所有的key组成的视图转成集合 {'lili', 'kaka', 'lisa'}
#获取所有的value
dire1={'lili':10,'lisa':11,'kaka':12}
value1=dire1.values()
print(value1) #dict_values([10, 11, 12])
print(type(value1)) #<class 'dict_values'>
print(list(value1))  #将所有的value值组成的视图转换成列表[10, 11, 12]
print(tuple(value1))  #将所有的value值组成的视图转换成元组(10, 11, 12)
print(set(value1))    #将所有的value值组成的视图转换成集合{10, 11, 12}
# 获取所有的key-value对
dire1={'lili':10,'lisa':11,'kaka':12}
items=dire1.items()
print(items) #dict_items([('lili', 10), ('lisa', 11), ('kaka', 12)])
print(list(items)) #[('lili', 10), ('lisa', 11), ('kaka', 12)]  转换之后的列表元素是由元组组成的

# 根据相同的值来获取不同的键
dicts={'Math':100,'Chinese':100,'Engish':90}
keys=[k for k,v in dicts.items() if v==100]
print('值为100的键有:',keys)  #值为100的键有: ['Math', 'Chinese']

字典元素的遍历

使用键值对遍历

dire1={'lili':11,'lala':22,'caca':23}
for item in  dire1.items():
    print(item)
'''
('lili', 11)
('lala', 22)
('caca', 23)
'''
dire1={'lili':11,'lala':22,'caca':23}
for key,value in dire1.items():
    print(key,"的年龄是:",value)
'''
lili 的年龄是: 11
lala 的年龄是: 22
caca 的年龄是: 23
'''

遍历字典的键:

dire1={'lili':11,'lala':22,'caca':23}
for keys in dire1.keys():
    print(keys)
'''
lili
lala
caca
'''

遍历字典的值:

dire1={'lili':11,'lala':22,'caca':23}
for values in dire1.values():
    print(values)
'''
11
22
23
''' 

向字典中增加元素

dire2={'cici':12,'dodo':13,'cici':11,'qiqi':10}
print('新增前dire2的字典:',dire2,id(dire2))  #增加前dire2的字典: {'cici': 11, 'dodo': 13, 'qiqi': 10} 140215317019616
dire2['kiki']=20 #默认再字典元素末尾新增一个元素
print('新增元素后的字典:',dire2,id(dire2))  #增加元素后的字典: {'cici': 11, 'dodo': 13, 'qiqi': 10, 'kiki': 20} 140215317019616

给字典删除元素

dire1={'lili':1,'kaka':23,'lala':99,'didi':10}
print('删除前dire1字典:',dire1,id(dire1))  #删除前dire1字典: {'lili': 1, 'kaka': 23, 'lala': 99, 'didi': 10} 140215317019536
del dire1['lili']
print('删除指定元素后的dire1字典:',dire1,id(dire1))#删除指定元素后的dire1字典: {'kaka': 23, 'lala': 99, 'didi': 10} 140215317019536

修改字典中的元素

# 修改字典相应键的值
dire2={'cici':12,'dodo':13,'cici':11,'qiqi':10}
dire2['cici']=55
print('修改值后的字典:',dire2)  #修改值后的字典: {'cici': 55, 'dodo': 13, 'qiqi': 10, 'kiki': 20}

每篇一语

工欲善其事,必先利其器!
如有不足,感谢指正!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_64122448/article/details/129627623

用python算卦——银钱演算法-爱代码爱编程

用python算卦——银钱演算法 1.项目说明1.1银钱演算法介绍2.代码部分2.1运行效果小结 1.项目说明 本学期有一门课呢,叫做周易与决策咨询。 那因为疫情,上的是网课。 有个视频我看了以后对周易的这种占卜之术还挺感兴趣的。 视频里的刘大师呢,用了蓍草法,银钱法。 银钱法是比较简便,效率也高的一种方法。 那我试着用python写点代码,

python语言学习——循环结构-爱代码爱编程

python语言学习——循环结构 1 遍历结构——for语句1.1 for语句的基本结构1.2 常用使用方法1.3 拓展模式1.3.例子2 无限循环——while语句2.1 while语句的基本结构2.2 拓展模式2.2.例子3 循环保留字——break和continue3.1 break的运用3.1.例子3.2 continue语句的运用3.2.

pythonmsgbox怎么使用_python学习——EasyGui msgbox()-爱代码爱编程

刚接触PYTHON没几天,照着《父与子的编程之旅》学习到第6章——GUI图形用户界面,由于书中所用的PYTHON版本为2.7,而我电脑上安装的为3.7最新版本,学习起来有很多地方要注意区别,一开始也为学习什么版本烦恼过,搜过很多答案都各有各的说法,最后自己还是决定学习最新的,不怕3.7版本与其他应用的兼容问题,我相信迟早是要跟上PYTHON的脚步的。 说说

python学习——python实现冒泡排序算法-爱代码爱编程

python实现冒泡排序算法 一、冒泡排序算法实现原理基本思想具体步骤二、图解快速排序三、py代码实现冒泡排序算法 一、冒泡排序算法实现原理 基本思想 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了

part1:第一个python程序——“hello world“-爱代码爱编程

part1:第一个python程序——“hello world” 一、第一种方法 1、步骤 Windows+R—>cmd—>python—>print(“hello world”)—>Enter 2、注意 1.hello world外面必须用英文双引号(中文的双引号略大于英文的双引号)。——“。。。”(中文) “…”(E

PYTHON学习———天天向上的力量小解析-爱代码爱编程

PYTHON学习———天天向上的力量小解析 一开始对于这个代码有点不太懂一直以为他从第一行就开始运行了,知道查了很多东西才发现不是这样的。 def dayUP(n): dayup=1 for i in range(365): if i%7 in [0,6]: dayup=dayup*(1-0.01

Python 库学习 —— urllib 学习-爱代码爱编程

文章目录 系列文章1、导入urllib库2、get方式访问3、post方式访问4、超时处理5、网页相关信息6、模拟浏览器 系列文章 Python 学习 01 —— Python基础Python 库学习 —— urllib 学习Python 库学习 —— BeautifulSoup4学习Python 库学习 —— Re 正则表达式Python

Python 学习笔记——笨方法学python3——习题41-爱代码爱编程

1.sys.argv:     是一个从【程序外部】获取参数的桥梁,可以是一个,也可以是一个列表。【0】,【1】...代表的是输入参数位置,其中【0】代表程序本身 import sys a = sys.argv[0] print(a) 结果: PS E:\桌面\ex> python ex.py ex.py PS E:\桌面\

python学习——列表_yy加油写代码的博客-爱代码爱编程

列表 定义:列表是由一系列按特定顺序排列的元素组成。用方括号([])表示,逗号分隔元素。列表元素(1)访问列表元素         列表是有序集合,故只需知晓元素位置(索引)即可访问。 例: (2)python中,列表索引从0开始,但也为最后一个列表元素提供了特殊语法——将所应指定为-1. (3)使用列表中的值 可像使用

计算机视觉--刷题笔记-鸢尾花分类的学习_你家喵的博客-爱代码爱编程

描述 机器学习库 sklearn 自带鸢尾花分类数据集,分为四个特征和三个类别,其中这三个类别在数据集中分别表示为 0, 1 和 2,请实现 transform_three2two_cate 函数的功能,该函数是一个无参函数,要求将数据集中 label 为 2 的数据进行移除,也就是说仅保留 label 为 0 和为 1 的情况,并且对 label 为 0

leetcode(python)—— 买卖股票的最佳时机(简单)_娱乐不打烊丶的博客-爱代码爱编程

买卖股票的最佳时机 概述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 输入:[7,1,5,3,6,4] 输

第 n 个神奇数字(困难)_娱乐不打烊丶的博客-爱代码爱编程

第 N 个神奇数字 概述:一个正整数如果能被 a 或 b 整除,那么它是神奇的。给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值。 输入:n = 1, a = 2, b = 3 输出:2 输入:n = 4, a = 2, b = 3 输出:6 方法一:二分查找 思路:#

python每日一练——第6天:判断有效括号_python给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符-爱代码爱编程

文章目录 1. 算法描述2. 实例说明3. 算法思路3. 代码实现字符串替换法栈 《100天精通Python从入门到就业》专栏推荐白嫖80gPython全栈视频 1. 算法描述