知识点

字典属于映射类型。

列表,元祖,字符串等属于序列类型

  • 创建及访问字典
  1. #创建一个字典
  2. >>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it','阿迪达斯':'Impossible is nothing','鱼C工作室':'让编程改变世界'}
  3. 键(key):李宁
  4. 值(value):一切皆有可能
  5. #访问字典
  6. >>> print('鱼C工作室的口号是:',dict1['鱼C工作室'])
  7. C工作室的口号是: 让编程改变世界
  8. >>> dict2 ={1:'one',2:'two',3:'three'}
  9. >>> dict2[2]
  10. 'two'
  • 创建一个空字典
  1. 创建一个空字典:
  2. >>> dict1 = {}
  3. >>> dict1
  4. {}
  5. 或者
  6. >>> dict3 = dict()
  7. >>> dict3
  8. {}
  • 创建字典的一些其他方法

dict(mapping)从映射对象(key,value)中初始化的新字典,例如:

  1. >>> dict4 = dict((('F',70),('i',105),('s',115),('h',104),('C',67)))
  2. >>> dict4
  3. {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
  4. # mapping可以是列表,也可以是元祖
  5. >>> dict1 = dict((['F',70],['i',105],['s',115],['h',104],['C',67]))
  6. >>> dict1
  7. {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}

dict(**kwargs)用关键字参数列表中的name = value对初始化的新字典。 例如:

  1. >>> dict5 = dict(小甲鱼='让编程改变世界',苍井空='让xx征服所有宅男')
  2. >>> dict5
  3. {'小甲鱼': '让编程改变世界', '苍井空': '让xx征服所有宅男'}

直接给字典的key赋值:

  1. >>> dict5
  2. {'小甲鱼': '让编程改变世界', '苍井空': '让xx征服所有宅男'}
  3. >>> dict5['苍井空'] = '所有xx从业者都要通过学习编程来提高职业技能'
  4. >>> dict5
  5. {'小甲鱼': '让编程改变世界', '苍井空': '所有xx从业者都要通过学习编程来提高职业技能'}
  6. >>>
  7. >>> dict5['爱迪生'] = '天才'
  8. >>> dict5
  9. {'小甲鱼': '让编程改变世界', '苍井空': '所有xx从业者都要通过学习编程来提高职业技能', '爱迪生': '天才'}

课后习题

测试题

  • 尝试一下将数据('F':30,'C':67,'h':104,'i':105,'s':115)创建为一个字典并访问键’C’对应值
  1. >>> MyDict = dict((('F', 70), ('i',105), ('s',115), ('h',104), ('C',67)))
  2. >>> MyDict_2 = {'F':70, 'i':105, 's':115, 'h':104, 'C':67}
  3. >>> type(MyDict)
  4. <class 'dict'>
  5. >>> type(MyDict_2)
  6. <class 'dict'>
  7. >>> MyDict['C']
  8. 67
  • 用方括号[]括起来的数据我们叫列表,那么使用大括号{}括起来的数据我们就叫字典,对吗?
  1. >>> a = {1, 2, 3, 4, 5}
  2. >>> type(a)
  3. <class 'set'>

不难发现,虽然我们用大括号{}把一些数据括起来了,但由于没有反映出这些数据有映射的关系,所以创建出来的不是字典,而是叫set的东西

  • 你如何理解有些字典做得到,但“万能的”列表却难以实现?
  1. #举个例子
  2. >>> brand = ['李宁', '耐克', '阿迪达斯', '鱼C工作室']
  3. >>> slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing', '让编程改变世界']
  4. >>> print('鱼C工作室的口号是:', slogan[brand.index('鱼C工作室')])
  5. C工作室的口号是: 让编程改变世界
  6. 列表brandslogan的索引和相对的值是没有任何关系的,我们可以看出唯一有联系的就是两
  7. 个列表间,索引号相同的元素是有关系的,所以这里我们通过brand.index('鱼C工作室')这样的
  8. 语句,间接的实现通过品牌查找对应的口号的功能。
  9. 这确实是一种可实现方法,但用起来,多少有些别扭,效率还不高。况且Python是以简洁为主,
  10. 这样子的实现肯定是不能让人满意的,我们需要有字典这种映射类型的出现:
  11. >>> dict1 = {'李宁':'一切皆有可能', '耐克':'Just do it', '阿迪达斯':'Impossible is nothing', '鱼C工作室':'让编程改变世界'}
  12. >>> print('鱼C工作室的口号是:', dict1['鱼C工作室'])
  13. C工作室的口号是: 让编程改变世界
  • 下边这些代码,他们都在执行一样的操作吗?你看得出差别吗?
  1. >>> a = dict(one=1, two=2, three=3)
  2. >>> a
  3. {'one': 1, 'two': 2, 'three': 3}
  4. >>> b = {'one': 1, 'two': 2, 'three': 3}
  5. >>> b
  6. {'one': 1, 'two': 2, 'three': 3}
  7. >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
  8. >>> c
  9. {'one': 1, 'two': 2, 'three': 3}
  10. >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
  11. >>> d
  12. {'two': 2, 'one': 1, 'three': 3}
  13. >>> e = dict({'three': 3, 'one': 1, 'two': 2})
  14. >>> e
  15. {'three': 3, 'one': 1, 'two': 2}
  • 如图,你可以推测出打了马赛克部分的代码吗?

  1. #利用字符串的分割方法。
  2. data = '1000,小甲鱼,男'
  3. MyDict = {}
  4. (MyDict['id'],MyDict['name'],MyDict['sex']) = data.split(',')
  5. print("ID: " + MyDict['id'])
  6. print("Name: " + MyDict['name'])
  7. print("Sex: " + MyDict['sex'])
  8. ID: 1000
  9. Name: 小甲鱼
  10. Sex:

动动手

  • 尝试利用字典特性编写一个通讯录程序吧,功能如图:

  1. print('|--- 欢迎进入通讯录程序 ---|')
  2. print('|--- 1:查询联系人资料 ---|')
  3. print('|--- 2:插入新的联系人 ---|')
  4. print('|--- 3:删除已有联系人 ---|')
  5. print('|--- 4:退出通讯录程序 ---|')
  6. txl = dict()
  7. while 1:
  8. instr = int(input('\n请输入相关的指定代码:'))
  9. if instr == 1:
  10. name = input('请输入联系人姓名:')
  11. if name in txl:
  12. print(name + ':' + txl[name])
  13. else:
  14. print('您输入的姓名不在通讯录中!')
  15. if instr == 2:
  16. name = input('请输入联系人姓名:')
  17. if name in txl:
  18. print('您输入的姓名已存在 -->>',end='')
  19. print(name + ':' + txl[name])
  20. if input('是否修改用户资料(YES/NO):').upper() == 'YES':
  21. txl[name] = input('请输入用户联系电话:')
  22. else:
  23. txl[name] = input('请输入用户联系电话:')
  24. if instr == 3:
  25. name = input('请输入联系人姓名:')
  26. if name in txl:
  27. del(txl[name])
  28. else:
  29. print('您输入的联系人不存在。')
  30. if instr == 4:
  31. break
  32. print('|--- 感谢使用通讯录程序 ---|')

零基础入门学习Python(25)--字典:当索引不好用时的更多相关文章

  1. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  2. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  3. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  4. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  5. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  6. 零基础入门学习Python(26)--字典:当索引不好用时2

    知识点 删除字典元素 能删单一的元素也能清空字典,清空只需一项操作. 显示删除一个字典用del命令,如下: >>> dict1 = {'a':1,'b':2,'c':3} >& ...

  7. 零基础入门学习Python(36)--类和对象:给大家介绍对象

    知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...

  8. 零基础入门学习Python(17)--函数:Python的乐高积木

    前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...

  9. 零基础入门学习Python(35)--图形用户界面入门:EasyGui

    知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...

随机推荐

  1. 类似查询mysql数据库的查询XML的JS类

    一个快捷操作XML数据库的Javascript接口对象,包含select.count.tables.fields等方法,能够像操作mysql等其它数据库一样操作XML数据库. if(document. ...

  2. Node 基本使用

    node -v:查看node版本 npm -v:查看npm版本 npm install npm -g :升级npm版本 npm install <module_name> [-g]:安装指 ...

  3. JS Promise API

    一.描述 我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个任务完成后才可以继续下一个任务. 这种“单线程”的好处就是 ...

  4. HDU1430;魔板(BFS+康托展开)

    传送门 题意 给出初始序列与终止序列,给出三种操作,问最少经过几次操作能使初始->终止,输出操作(字典序最小) 分析 字符串只有8个字符,使用康托展开. 1.BFS将所有序列从"123 ...

  5. bzoj 1084: [SCOI2005]最大子矩阵【dp】

    分情况讨论,m=1的时候比较简单,设f[i][j]为到i选了j个矩形,前缀和转移一下就行了 m=2,设f[i][j][k]为1行前i个,2行前j个,一共选了k个,i!=j的时候各自转移同m=1,否则转 ...

  6. bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)

    传送门 直接暴力把线性规划矩阵给打出来然后单纯形求解就行了 简单来说就是每个数记一个\(d_i\)表示选或不选,那么就是最大化\(\sum d_ic_i\),并满足一堆限制条件 然后不要忘记限制每个数 ...

  7. 洛谷P4374 [USACO18OPEN]Disruption(树链剖分+线段树)

    传送门 不难发现,每一条额外修的路径,会对原树上$(u,v)$路径上的所有边产生贡献 于是这就变成了一个路径修改 那么我们把每一条边赋值到它连接的两个点中深度较大的那个上面,然后每一次用树剖+线段树做 ...

  8. bzoj1233 [Usaco2009Open]干草堆tower 【单调队列dp】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1233 单调队列优化的第一题,搞了好久啊,跟一开始入手斜率优化时感觉差不多... 这一题想通了 ...

  9. 递推DP UVA 607 Scheduling Lectures

    题目传送门 题意:教授给学生上课,有n个主题,每个主题有ti时间,上课有两个限制:1. 每个主题只能在一节课内讲完,不能分开在多节课:2. 必须按主题顺序讲,不能打乱.一节课L时间,如果提前下课了,按 ...

  10. Oracle10g初探DBCA

    Database Configuration Assistant. [oracle@dbsrv3 bin]$ pwd /opt/oracle//bin [oracle@dbsrv3 bin]$ ./d ...