Python学习(6)--字典

简介: Python学习(6)--字典 1.python字典 python中的字典相当于java中的HashMap类,是一个键值对序列,现在我们来谈谈引入字典的必要性。先看看如果不使用字典,用列表的代码: [python] view plain copy t1=['name','age','.

Python学习(6)--字典

1.python字典

python中的字典相当于java中的HashMap类,是一个键值对序列,现在我们来谈谈引入字典的必要性。先看看如果不使用字典,用列表的代码:

[python] view plain copy

  1. t1=['name','age','gender']
  2. t2=['lisi',24,'man']
  3. t3=list(zip(t1,t2))
  4. print(t3)

代码运行结果如下:

如代码所示zip()函数将t1和t2两个列表压缩成一个列表,列表的中每个元素又是由t1和t2按下标分别组成的元组,如:t1[0]和t2[0]组成t3[0]这个元组,以此类推.通过打印我们可以发现t3[0]=('name','lisi'),以及t3[1]和t[2]的值,但是我们在使用t3[0]这个列表元素时,并不知道t3[0]存储的是一个人的名字,这样写出来的程序就不具有可读性.

再来看看使用字典的代码:

 

[python] view plain copy

  1. dic1={'name':'lisi','age':24,'gender':'male'}
  2. print(dic1)
  3. print(dic1['name'])
  4. print(dic1['age'])
  5. print(dic1['gender'])

 

如代码所示第一行我们定义了一个字典,可以看到字典室由一个个的键值对组成,即'name','age','gender'是键,'lisi',24,'male'分别是键对应的值,在获取每个键的值时,我们只需知道每个值的键是什么,如我们想知道一个人的名字,只需dic1['name']来获取,这样代码更加可读,我们也无需记住name对应的下标是什么.减少了程序员的记忆负担.

运行结果如下:

还有我们要注意的是python的字典是无序的键值对序列,即python中的元素排序是不分先后的,我们不能像字符串,元组或者列表那样通过下标来获取python中的元素.代码如下:

[python] view plain copy

  1. dic1={'name':'lisi','age':24,'gender':'male'}
  2. print(dic1[0])

代码运行结果如下:

发生错误KeyError,说明不能用下标来获取字典元素,只有当字典中有0这个键时,我们才能才可以这样写.

还有一点需要注意的是字典的键或者值可以是一个变量,但是通过键获取对应的值的时候我们不能通过变量名对应的字符串去获取。代码如下:

[python] view plain copy

  1. name=1
  2. dic2={name:'lisi','age':24,'gender':'male'}
  3. print(dic2['name'])

如下是运行结果:

这是因为我们现在使用的键是一个值为1的name变量,而不是一个字符串'name',这一点不要混淆。

正确获取方式如下:

[python] view plain copy

  1. name=1
  2. dic2={name:'lisi','age':24,'gender':'male'}
  3. print(dic2[name])
  4. print(dic2[1])

运行结果如下:

在这里我们可以使用变量名name或者变量名的值获取键对应的值.

2.构造字典的方式

对于字典的构造方式,方式很多。下面我们来介绍其中比较常见的几种。第一种是字典中的fromkeys()方法,这个方法一般适用于字典多个不同的键,但键对应的值相同的情况.fromkeys方法有两个参数,一个参数为键组成的列表,另一个参数就是键对应的值了.代码如下:

[python] view plain copy

  1. dic3={}.fromkeys(['a','b'])
  2. print(dic3)
  3. dic4={}.fromkeys(['a','b'],1)
  4. print(dic4)

运行结果如下:

当不指定键对应的值,fromkeys()方法只有一个参数的时候,键对应的值默认为None,如图。

第二种就是使用工厂方法dict(),这个方法只有一个参数,参数为一个序列,这个序列可以包含其他序列,但需要注意的是参数序列包含的序列必须>=2,代码如下:

 

[python] view plain copy

  1. dic5=dict((['a',1],['b',2]))#定义一个参数为元组,元组又包含两个列表的字典
  2. print(dic5)
  3. dic6=dict((('a',1),['b',2]))#定义一个参数为元组,元组包含一个元组和一个列表的字典
  4. print(dic6)
  5. dic7=dict([('b',1),('c',2)])#定义一个参数为列表,列表又包含两个元组的字典
  6. print(dic7)

 

代码运行结果如下:

再看下参数序列只包含一个序列的代码:

[python] view plain copy

  1. dic8=dict((('b',1)))
  2. print(dic8)

运行结果如下:

错误提示我们:第一个参数序列只长度只有1,需要两个序列,这是因为参数序列只包含一个序列,需要至少两个序列,这一点希望大家注意.

3.字典的增删查改

字典作为python中的数据集合,也是可以对其增删查改的,下面介绍下字典的增删查改对应的方法.

增加或修改一个字典元素:

 

[python] view plain copy

  1. dic1={'name':'lisi','age':24,'gender':'male'}
  2. dic1['tel']='1587335928'#增加一个字典元素,键为'tel',值为'1587335928'
  3. print(dic1)
  4. dic1['name']='zhangsan'#修改键为'name'的字典元素值为'zhangsan'
  5. print(dic1)

对应的打印结果如下:

当通过键为字典的元素赋值时,如果字典中存在这个键,那么就是修改键对应的的值,如果不存在,python会为字典添加这个元素,如dic1['tel']='1587335928',字典中没有'tel'这个键,python会添加'tel':'1587335928'这个键值对元素.

删除或者清空字典,代码如下:

 

[python] view plain copy

  1. del(dic1['tel'])#删除键为'tel'的元素
  2. print(dic1)
  3. print(dic1.pop('gender'))#删除键为'gender'的元素,pop()方法会返回键为'gender'元素的值
  4. dic1.clear()#清空字典的所有元素,使之成为一个长度为0的空表
  5. print(dic1)
  6. del(dic1)#删除一个列表,讲列表完全从内存中清空
  7. print(dic1)

运行结果如下:

删除一个字典中的元素,可以使用方法del(),或者字典类的方法pop(),两个方法的不同之处是,pop()方法会返回被删元素键对应的值,而del()方法不会返回值,clear()是清空字典中的所有元素,但是在内存中对象还在,del()方法删除字典则是删除字典对象,删除后内存中不会有被删字典对象,所以程序中打印出现错误.

字典的遍历,代码如下:

 

[python] view plain copy

  1. dic1={'name':'lisi','age':24,'gender':'male'}
  2. for key in dic1:
  3.     print(key)
  4. for key in dic1:
  5.     print(dic1[key])
  6. print(dic1.get('tel','error'))

 

for key in dic1表示遍历字典中所有的键,dic1[key]是获取key对应的值,get()方法是获取键对应的值,参数可以是一个,也可以是两个,如果是一个,则返回对应的值,字典中不存在这个键,返回的是None;如果是两个参数,若字典中存在key对应的值,则返回值,若不存在,则返回第二个参数作为提示,如dic1.get('tel','error'),字典中没有'tel'这个键,则返回'error'.

结果如下图:

下节我们将来介绍python中的逻辑流程控制,最近忙着写课设作业,更新的有点慢,希望大家见谅.

原文地址http://www.bieryun.com/2297.html

相关文章
|
1天前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
1天前
|
索引 Python
Python中的列表、元组和字典各具特色
Python中的列表、元组和字典各具特色:列表是可变的,元组不可变,字典亦可变;列表和元组有序,字典无序(但在Python 3.7+保持插入顺序);元素类型上,列表和元组元素任意,字典需键不可变;列表用方括号[],元组用圆括号(),字典用大括号{}表示。列表不适合作字典键,元组可以。选择数据结构应依据实际需求。
7 2
|
3天前
|
开发者 Python
【Python 基础】递推式构造字典(dictionary comprehension)
【5月更文挑战第8天】【Python 基础】递推式构造字典(dictionary comprehension)
|
3天前
|
小程序 程序员 开发者
Python学习心得——小白的成长之路
Python学习心得——小白的成长之路
11 0
|
4天前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如'cat')的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
4天前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
6天前
|
机器学习/深度学习 数据挖掘 程序员
Python学习难度的具体标准
Python学习难度因个人编程背景、目标、资源和学习能力而异。对有编程经验者来说,Python的简单语法使其易上手;而对于新手,理解基础概念可能需更多时间。不同应用领域(如Web开发、数据分析)的学习曲线也不同。丰富的学习资源适应各种水平,但选择合适资源很重要。成功学习Python需要逻辑思维、问题解决能力及毅力。总的来说,Python学习难度因人而异,需结合自身条件评估。
19 0
|
6天前
|
存储 索引 Python
python数据结构知识学习
【5月更文挑战第6天】Python提供四种核心数据结构:列表(List)——可变有序集合,支持索引和切片;元组(Tuple)——不可变有序集合;字典(Dictionary)——键值对结构,通过键访问值;集合(Set)——无序不重复元素集合,支持数学运算。此外,Python允许自定义数据结构,如链表、树、图,以适应不同问题需求。
15 0
|
11天前
|
机器学习/深度学习 分布式计算 物联网
【Python机器学习专栏】联邦学习:保护隐私的机器学习新趋势
【4月更文挑战第30天】联邦学习是保障数据隐私的分布式机器学习方法,允许设备在本地训练数据并仅共享模型,保护用户隐私。其优势包括数据隐私、分布式计算和模型泛化。应用于医疗、金融和物联网等领域,未来将发展更高效的数据隐私保护、提升可解释性和可靠性的,并与其他技术融合,为机器学习带来新机遇。
|
11天前
|
机器学习/深度学习 自然语言处理 搜索推荐
【Python机器学习专栏】迁移学习在机器学习中的应用
【4月更文挑战第30天】迁移学习是利用已有知识解决新问题的机器学习方法,尤其在数据稀缺或资源有限时展现优势。本文介绍了迁移学习的基本概念,包括源域和目标域,并探讨了其在图像识别、自然语言处理和推荐系统的应用。在Python中,可使用Keras或TensorFlow实现迁移学习,如示例所示,通过预训练的VGG16模型进行图像识别。迁移学习提高了学习效率和性能,随着技术发展,其应用前景广阔。