零基础学 Python(2018 版)
尹会生
前游戏公司技术总监,前新浪网技术经理
80146 人已学习
新⼈⾸单¥68
课程目录
已完结/共 72 讲
第一章 :Python介绍和安装 (3讲)
第二章 :Python基础语法 (3讲)
第四章 :条件与循环 (5讲)
第五章 :映射与字典 (2讲)
第六章 :文件和输入输出 (2讲)
第七章 :错误和异常 (1讲)
第九章 :模块 (1讲)
第十章 :语法规范 (1讲)
第十一章 :面向对象编程 (4讲)
第十二章 :多线程编程 (2讲)
第十六章 :综合案例 & 结课测试 (1讲)
特别放送 (1讲)
零基础学 Python(2018 版)
登录|注册
留言
48
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 17 | 字典的定义和常用操作
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | Python语言的特点
02 | Python的发展历史与版本
03 | Python的安装
04 | Python程序的书写规则
05 | 基础数据类型
06 | 变量的定义和常用操作
07 | 序列的概念
08 | 字符串的定义和使用
09 | 字符串的常用操作
10 | 元组的定义和常用操作
11 | 列表的定义和常用操作
12 | 条件语句
13 | for循环
14 | while循环
15 | for循环语句中的if嵌套
16 | while循环语句中的if嵌套
17 | 字典的定义和常用操作
18 | 列表推导式与字典推导式
19 | 文件的内建函数
20 | 文件的常用操作
21 | 异常的检测和处理
22 | 函数的定义和常用操作
23 | 函数的可变长参数
24 | 函数的变量作用域
25 | 函数的迭代器与生成器
26 | Lambda表达式
27 | Python内建函数
28 | 闭包的定义
29 | 闭包的使用
30 | 装饰器的定义
31 | 装饰器的使用
32 | 自定义上下文管理器
33 | 模块的定义
34 | PEP8编码规范
35 | 类与实例
36 | 如何增加类的属性和方法
37 | 类的继承
38 | 类的使用-自定义with语句
39 | 多线程编程的定义
40 | 经典的生产者和消费者问题
41 | Python标准库的定义
42 | 正则表达式库re
43 | 正则表达式的元字符
44 | 正则表达式分组功能实例
45 | 正则表达式库函数match与search的区别
46 | 正则表达式库替换函数sub()的实例
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹操作
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumPy安装
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代码
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式get和post
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链接
68 | Beautiful Soup的安装和使用
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下载图片
强势回归:零基础学Python2022版来啦!
71 | 如何分析源代码并设计合理的代码结构&结课测试
本节摘要

课程源码、课件及课后作业地址:

https://gitee.com/geektime-geekbang/geekbangpython

登录 后留言

全部留言(48)

  • 最新
  • 精选
Gea
老师您好,在统计生肖案例中,声明两个字典,一个记录生肖的数量,一个记录星座的数量,我们是先声明一个空字典,然后依次赋值。用for in 的方式一次取出生肖的名字,到这里都懂,但是下一句,cz_num[i]=0 让它的值都等于0赋给cz_num这个字典是什么意思呢?为什么要值等于0呢?(sorry 我是零基础😂)

作者回复: 您好,所有人学编程都是要从0基础慢慢学习积累的,所以想到一些问题就多利用搜索引擎和文档查看,多调试和编写程序,会很快提升你的编程能力的。有觉得技术点把握不好的地方也欢迎你多留言:p 下面我把程序做一下简化和修改,它的目的是为了每输入一次年份,计算一次生肖,并且记录年份对应生肖的查询次数。 chinese_zodiac = u'猴鸡狗猪鼠牛虎兔龙蛇马羊' cz_num = {} for i in chinese_zodiac: cz_num[i] = 0 while True: year = int(input('year:')) cz_num[chinese_zodiac[year % 12]] += 1 for eachKey in cz_num.keys(): print('%s %d' %(eachKey, cz_num[eachKey])) 为了达到这个目的,我要先让字典里面的key是生肖,计数器是0 for i in chinese_zodiac: cz_num[i] = 0 这两个语句就是起到这个功能的。执行完之后,字典就变成下面这样 {猴:0,鸡:0,狗:0,猪:0,鼠:0,牛:0,虎:0,兔:0,龙:0,蛇:0,马:0,羊:0} 当我输入2018 赋值给变量year之后,程序会计算它对应的年份--狗,执行 cz_num['狗'] += 1 字典就变成了 {猴:0,鸡:0,狗:1,猪:0,鼠:0,牛:0,虎:0,兔:0,龙:0,蛇:0,马:0,羊:0} 如果再次输入2018、会再执行cz_num['狗'] += 1 对生肖进行累加,相应的生肖狗会变为值2,其他的生肖因为没有输入,所以依然为0。 如果不为字典赋初始值0,无法进行上面的 += 1 的运算,它是数学运算,不能和空值进行相加;也没办法对生肖为0的结果进行输出了,不知道我这样解释你能否理解这行代码起到的作用。 建议在需要观察的变量下面增加print()函数,以便你能更直观的看到执行结果。

2018-07-15
66
adult = "成年","未成年" year0 = int(input('请输入年龄')) year1 = {} for i in adult: year1[i] = 0 if year0 >= 18: year1[adult[0]] +=1 print('您已成年') elif year0 <18: year1[adult[1]] +=1 print('您未成年') print('统计数据:',year1) 昨天看完后,觉得不太理解,又写了一份,后来感觉其实这个和投票机有点像,如果使用了某个值,就给这个值+1..我觉得用户可能理解起来更容易,您可以看看。

作者回复: 这个例子很好,如果能把year0 year1变量替换为更有意义的变量名称, elif改写为else形式,是一个非常好的演示用例。

2018-10-16
4
7
love the way
您好,最近正在学Python,看到您发布了课程立马就购买学习了。在这一讲中,有个字典多层嵌套的问题始终没搞明白, USERS = {"tom":{"name":"tom","age":"22","password":"123123"}, "jack":{"name":"jack","age":"20","password":"123456"}} 比如,我要在以上例子中再添加个Mary,该如何添加呢,尝试了多次,感觉没理顺,不知是否可以帮忙解答下

作者回复: 现阶段使用字典有两大好处需要掌握,第一个是相对于字符串、数字、列表等基础数据结构,它有一个唯一的名字,即“键”,方便你使用名字操作具体的内容“值”, 第二个就是使用字典类型存储大量的内容,查找速度要比其他基本类型要快 字典的嵌套可以理解为,以前将字符串、数字作为“值”赋值给字典的“键”,现在将一个字典作为“值”赋值给字典的“键” 看下下面的例子 # 首先我们可以定义一个非嵌套的字典 dict1 = {'tom': 'a', 'jerry': 'b'} # 为非嵌套的字典增加一个新的键/值对,赋值的类型是字符串 dict1['mary1'] = 'c' # 输出新的字典的内容 print('没有嵌套的字典 %s' % dict1) # 如果mary2本身就是一个字典可以直接像字符串一样增加到dict1中 dict1['mary2'] = {'name': 'mary mary', 'age': 18} # 输出新的字典的内容 print('有嵌套的字典 %s' % dict1) # 输出外层字典的内容 print(dict1['mary2']) # 输出内层字典的内容 print(dict1['mary2']['age']) 这种字典里面的值也是字典类型就是字典嵌套了

2018-06-03
6
野望
老师,您是怎么把那一小段代码一键放入while循环的?

作者回复: 使用ctrl+v 粘贴之后,pycharm会自动为你调整缩进格式。如果缩进不符合你的要求,可以选中多行,用tab键一次性多行缩进。

2018-08-30
2
3
醉风
Desktop/python/练习/循环与判断.py 请输入一段字:123adb中国人民 字符串长度等于10 在py里数中英文字长的等价的吗

作者回复: “等价”不准确,在输入时由于python上层函数做了处理,所以一个汉字和一个英文字符都被计数为1个,当然底层不是这样,如果是utf-8编码,一个汉字是三个字节

2019-05-31
2
心纲
老师,我想问一下,关于输出星座中的判断语句,是像您实例中放在while循环里面好呢,还是像我这样先做判断好? n = 0 if int_month == 12 and int_day >= 22: pass else: while zodiac_days[n] <= (int_month, int_day): n += 1 print(zodiac_name[n])

作者回复: 程序写法的好坏要根据需求而定,像demo这么短小的代码两种写法没有比较的意义,如果一定要对这段代码比较的话,为什么不写成: if 条件成立: wiile 开始执行循环 更易读呢?

2019-01-11
1
Geek_5e40f4
为啥我的不能统计a

作者回复: 我提供两个找到问题的解决方法给你。帮你定位一下,为什么不能统计 第1个方法是在执行之后要查看执行的结果,是否有报错信息。当你的程序出现缩进问题或者是格式问题啊,以及手写的过程当中,可能会出现输入失误。这时候在执行的结果中就会有报错信息。根据爆出信息可以定位在第几行,出现了问题,然后将注意力集中在这样的行数范围解决无法统计的问题。 第2个方法呢是你要主动出击。首先观察一下,在pycharm是否有变量下面出现红色的波浪线,这些标记是提示你该变量在负值或者引用的过程当中可能出现错误。如果也没有这样的红色的波浪线,可以在程序的运行过程当中增加一个 print语句。使用打印语句来打印程序执行的中间过程变量,a是否按照你希望的运行方式执行了。 通过这样的两个方法,往往能够找到程序运行过程当中的逻辑问题,同时也能对你的编程技能和把控程序的能力有所提升。

2021-07-28
卢思
老师,我有个疑问❓ 输出统计列表时用了for each_key in cz_num.keys(): 为什么不能直接用下面👇🏻这种形式呢?(我试了下,也是对的) #输出生肖的统计列表 for i in cz_num: print('生肖为%s的人的数量为%d个'%(i,cz_num[i]))

作者回复: 你好, 两种用法都是对的,首先给善于思考并动手验证自己的想法这种做法点个赞! 我在视频中这样写的目的是想尽可能去用不同的方法,让你了解更多的字典的内置函数. 纠正一点, cz_num是字典类型并非列表类型. 加油

2021-03-04
Geek_7a471c
chinese_zodiac = '猴鸡狗猪鼠牛虎兔龙蛇马羊' zodiac_name = (u'摩羯座',u'水瓶座',u'双鱼座',u'白羊座',u'金牛座',u'双子座', u'巨蟹座',u'狮子座',u'处女座',u'天枰座',u'天蝎座',u'射手座') zodiac_days = ( (1,20),(2,19),(3,21),(4,21),(5,21),(6,22), (7,23),(8,23),(9,23),(10,23),(11,23),(12,23) ) cz_num = {} for i in chinese_zodiac: cz_num[i] = 0 z_num = {} for i in zodiac_days: z_num[i] = 0 while True: #用户输入出生年份月份和日期 year = int(input('请输入年份:')) month = int(input('请输入月份:')) day = int(input('请输入日期:')) n = 0 while zodiac_days[n] < (month,day): if month == 12 and day > 23: break n += 1 print(zodiac_name[n]) #输出生肖和星座 print('%s 年的生肖是 %s' % (year,chinese_zodiac[year % 12])) cz_num[chinese_zodiac[year % 12]] += 1 z_num[zodiac_name[n]] += 1 #输出生肖和星座的统计信息 for each_key in cz_num.keys(): print('生肖 %s 有 %d 个'%(each_key,cz_num[each_key])) for each_key in z_num.keys(): print('星座 %s 有 %d 个 '% (each_key,z_num[each_key])) 然后pycharm报错: /usr/local/bin/python3.7 /Users/alii/PycharmProjects/day1/zodiac3.py 请输入年份:1995 请输入月份:1 请输入日期:5 摩羯座 Traceback (most recent call last): File "/Users/alii/PycharmProjects/day1/zodiac3.py", line 37, in <module> z_num[zodiac_name[n-1]] += 1 KeyError: '射手座' 1995 年的生肖是 猪 Process finished with exit code 1 求指教~

作者回复: 1 注意看报错信息: line 37, in <module> 可知第一个问题在37行 z_num 应该为 cz_num 2 KeyError 这是典型的字典错误,可以在这行上面通过简单的 print(n) print(zodiac_name[n-1]) 等方法输出对象的内容,判断是否符合自己期望的值 在更加熟练python之后,可以用pycharm来进行程序的调试,学会调试程序也是开发的基本功之一

2020-08-11
Geek_c61727
老师,我的这个报错是怎么回事,代码和你的一样啊 Traceback (most recent call last): File "C:/Users/gongz/PycharmProjects/geek/第5章 映射与字典/1.字典的定义和常用操作.py", line 40, in <module> print('生肖 %s 有 %d 个'%(each_key,sx[each_key])) TypeError: string indices must be integers 摩羯座 2018 年的生肖是虎

作者回复: TypeError: string indices must be integers 注意看这个错误提示,这里你的sx是字符串,但是使用了sx[each_key] 这样的用法,导致了报错,要么改sx类型,要么each_key改为整数

2020-06-18
收起评论