热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python学习笔记字典

·字典(dict)笔记:字典(映射)成对出现,由键及其相应的值组成,键-值对称作项(item),字典是python中唯一内置映射类型。字典中的键必须是独一无二的。在python2中

 

·字典(dict)

笔记:

 

  • 字典(映射)成对出现,由键及其相应的值组成,键-值对称作项(item),字典是python中唯一内置映射类型。字典中的键必须是独一无二的。
  • 在python 2中进行拷贝需要调用copy模块;而在python 3 中可以直接使用浅拷贝copy(),当使用深拷贝deepcopy(),则需要调用copy模块。
  • 相比于检查列表是否包含指定的值,检查字典是否包含指定的键效率更高。

 

@ 创建一个字典


 使用-值对序列创建字典(键-值在元组中组成列表):

>>> item = [('name','jimmy'),('age','25'),('address','fujian')]
>>> x = dict(item)
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': 'fujian'}

 使用关键字创建字典:

>>> d = dict(name='jimmy',age=25)
>>> print(d)
{'name': 'jimmy', 'age': 25}

 

@ 字典的基本操作


 字典的基本操作与序列类似:

>>> x ={'name':'jimmy','age':'25','address':'fujian'}
>>> print(len(x))    #len():查询字典键-值对数
3
>>> print(x['name']) #x['']:查询name键的值
jimmy
>>> x['address'] = 'beijing' #x['']='value':替换address键对应的值
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': 'beijing'}
>>> del x['address']  #del x['']:删除字典中键为address的项
>>> print(x)
{'name': 'jimmy', 'age': '25'}  #检查字典中是否包含键为name的项(成员资格)
>>> print('name' in x)
True

 

@ 字典的方法


fromkeys():创建一个新字典,其中包含指定的键,值默认为None

>>> x = dict.fromkeys([x for x in range(1,11)])  #创建10个项(键-值对)
>>> print(x)
{1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 10: None}

 浅拷贝(copy):

>>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']}
>>> y = x.copy()
>>> print("x的ID为:",id(x))
x的ID为: 2394409585904
>>> print("y的ID为:",id(y))
y的ID为: 2394409586120
>>> y['age'] = 20
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#结论:x和y指向的内存地址不同,所以两个字典的值不会相互影响
>>> x['address'].remove('beijing') >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian']}
#结论:删除x字典的beijing时,y字典的值也随着删除。
这是因为浅拷贝只复制了第一层数据,字典里存储的子列表,打印出来是子列表,
在内存里,字典里只是存储了子列表的内存地址,子列表在内存里是单独存储的。

深拷贝(deepcopy):需要导入copy模块

>>>from copy import deepcopy  #导入模块
>>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']}
>>> y = deepcopy()
>>> print("x的ID为:",id(x))
x的ID为: 2394409585904
>>> print("y的ID为:",id(y))
y的ID为: 2394409586120
>>> y['age'] = 20
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#结论:x和y指向的内存地址不同,所以两个字典的值不会相互影响
>>> x['address'].remove('beijing')
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#结论:删除x字典的beijing时,y字典的值不会被删除。这是因为深复制把子列表也复制了一份

方法集合详解:

>>> x = {'name':'jimmy','age':'18','address':'Fujian','phone':'123456'}
>>> y = {'age':'100'}
>>> print(x.get('name','not found it'))     
jimmy  #get():查找x字典中name键的值,返回其键的值。它还提供默认值;x中没有name时,返回指定值not found it(没有指定则默认为None)
>>> print(x.setdefault('favorire','apple'))
apple  #setdefault():查找x字典中favorite键的值,返回其键的值;如果没有找到键,将在字典中添加一个键-值对(如果没有指定则默认为None)
>>> print(x) {'name': 'jimmy', 'age': '18', 'address': 'Fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("item()方法:",x.items()) #items():返回所有字典项(键值对)的列表 item()方法: dict_items([('name', 'jimmy'), ('age', '18'), ('address', 'Fujian'), ('phone', '123456'), ('favorire', 'apple')]) >>> print("keys()方法:",x.keys()) #keys():返回字典中的键 keys()方法: dict_keys(['name', 'age', 'address', 'phone', 'favorire']) >>> print("values()方法:",x.values()) #values():返回字典中的值 values()方法: dict_values(['jimmy', '18', 'Fujian', '123456', 'apple']) >>> print("pop()方法:",x.pop('name')) #pop(): 获取指定键相关联的值,并将该键-值对从字典中删除。 pop()方法: jimmy >>> print(x) {'age': '18', 'address': 'Fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("popitem()方法:",x.popitem()) #popitem():随机弹出一个项键值对(字典无序) popitem()方法: ('favorire', 'apple') >>> print(x) {'age': '18', 'address': 'Fujian', 'phone': '123456'} >>> print("update()方法:",x.update(y))  #update():使用一个字典来更新另一个字典,如果字典中没有,将添加一个项 update()方法: None >>> print(x) {'age': '100', 'address': 'Fujian', 'phone': '123456'} >>> print("clear()方法:",x.clear()) #删除所有字典项 clear()方法: None >>> print(x) {}

 

@ 浅拷贝应用:


 假设tom和jimmy分别持有信用卡主卡和副卡,共享额度10000,两个人都可以使用信用卡消费。

>>> creditcard = ['name',['saving',10000]]
>>> tom = creditcard.copy()
>>> jimmy = creditcard.copy()
>>> tom[0] = 'tom'
>>> jimmy[0] = 'jimmy'
>>> tom[1][1] = 5000     #假设tom消费5000元
>>> print('信用卡余额:',creditcard)
信用卡余额: ['name', ['saving', 5000]]
>>> print('tom的剩余额度',tom)
tom的剩余额度 ['tom', ['saving', 5000]]
>>> print('jimmy剩余额度',jimmy)
jimmy剩余额度 ['jimmy', ['saving', 5000]]

 end~

****** 几米花的Python ****** 博客主页:https://www.cnblogs.com/jimmy-share/  欢迎转载 ~

推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
吴沫燃2502934477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有