《金哥百变Python零基础教程6》~字典

本章知识点 :> 字典

北京地铁2号线
  • 本章介绍的是 字典, 字典也是一种组合数据类型,跟列表只有一个不同点(几乎就是孪生兄弟)
  • 现在我们一边复习列表的操作,一遍讲对应的字典操作

字典与列表
  • 假设现在有一本中英文对照字典,内容包括("你好" - 'hello') ("中国" - 'china') ("生活" - ’life') ("男孩" - ‘boy’) ... ...

  • 这样的一对对的词组

  • 思考:用list怎么存储这个中英文字典呢?(要考虑后面用中文去查找对应的英文)

  • 思路1:用两个列表,一个存储中文,一个存储英文(用下标1-1对应)
    list1 = ["你好","中国","生活","男孩"]
    list2 = ['hello','china',’life',‘boy’]

  • 思路2:用一个列表,每一个元素还是一个列表(存储中英文对)
    list = [
    ["你好" , 'hello'],
    ["中国" , 'china'],
    ["生活" , ’life'],
    ["男孩" , ‘boy’]
    ]

  • 直接用列表来存储这个字典,都无法直接通过中文找到英文(需要先找到下标,再找到英文)

  • 字典(Python里的字典类型)则可以直接通过中文找到英文

  • 看一下:
    d = {
    "你好" : 'hello',
    "中国" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    d["中国"] #结果为hello
    试一下 在线Python

  • 语法是这样的:


    image.png
  • 易错点:用 [ ] 表示 列表; 用 {} 表示 字典

  • 易错点:关键是理解 , 在列表里,用0,1,2,3 来表示变量的位置(还记得吗);在 字典 里,用 “中国” , 1, "abc"
    来表示变量的 key(也就是)

  • 在列表里这样访问数据,list[1] list[0] 字典里 d["a"] d["中国"]

  • 易错点:在列表里的变量可以是不同类型;字典里也一样
    d = {
    "a" : [1,2,3],
    "b" : True
    }
    试一下 在线Python


字典访问
  • 列表访问

list1 = ["你好","中国","生活","男孩"]
list2 = ['hello','china',’life',‘boy’]
i = list.index('中国')
list2[i] #结果为hello

  • 字典访问
    d = {
    "你好" : 'hello',
    "中国" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    d["中国"] #结果为hello
    试一下 在线Python

字典函数
  • 如何判断一个元素在列表里
    list1 = ["你好","中国","生活","男孩"]
    list2 = ['hello','china',’life',‘boy’]
    i = list.index('中国')
    if i >=0:
        print("在")
    试一下 在线Python

  • 如何判断一个元素在字典里
    d = {
    "你好" : 'hello',
    "中国" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    if ‘中国' in d:
        print("在")
    试一下 在线Python

  • 易错点:在字典的判断,直接用 x in dict 的语法即可

  • len函数 可以用在列表和字典上
    d = {
    "你好" : 'hello',
    "中国" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    print(len(d))
    试一下 在线Python

  • 添加元素(字典更加方便), 比如:添加一对单词 ('女孩' - 'girl')
    d['女孩'] = 'girl'
    print(d)
    试一下 在线Python

  • del 可以用于列表和字典的删除元素
    del d['男孩']
    print(d)
    试一下 在线Python


for 循环

list = [1,2,3,4,5]
for i in list:
    print(i)
试一下 在线Python

  • 这是一个列表遍历算法
  • 字典的遍历非常类似

d = {
"你好" : 'hello',
"中国" : 'china',
"生活" : ’life',
"男孩" : ‘boy’
}
for ch,en in d.items():
    print(ch + '-->' + en)
试一下 在线Python

  • 注意用d.items() 函数取出所有 键-值
  • 没有办法, 列表字典 就是这么形影不离,如果我们可以对照着理解,就会特别好记!

单词计数
  • 现在看一个实际问题,我们也理一理思路
  • 经典的单词计数问题,现在有一篇文章,请你写一个Python程序来计算每一个单词的出现次数(假设用aa bb来代表单词)
aa bb aa cc dd
aa bb cc aa ee
ff gg hh 
jj ff gg
ee ss
  • 思考一下:我们用什么来存储这篇文章?
  • 思考一下:我们用什么存储计数?

list = ['aa', 'bb']
d = {'aa':0, 'bb':0}

  • 我分别用list 和 d 来存储数据和计数(一个是列表,一个是字典)
  • 思路:显然要用循环
  • 重复的事:遍历list取每一个单词 word
  • 在d里面把word对应的计数+1
  • 还考虑写一个函数 取名 wordcount
  • 输入:list
  • 输出: d

def wordcount(list): ( 还记得函数吗?)
    d = {}
    #..
    return d

image.png
  • 实现如下:

list = ['aa' , 'bb' ,'aa' ,'cc' ,'dd',
'aa' ,'bb' ,'cc', 'aa', 'ee',
'ff' ,'gg' ,'hh' ,
'jj' ,'ff', 'gg',
'ee' ,'ss']

def wordcount(list):
    d = {}
    for word in list:
        is_in = word in d
        if is_in == False:
           d[word] = 0
        d[word] = d[word] + 1
    return d

  • 易错点:一定要注意用 word in d来判断是否存在
    试一下 在线Python

综合运用
北京地铁2号线
  • 问题:请为地铁2号线,编写问路程序 (要求指出最优路线)
  • 思路:先取名 环线最优路径算法
  • 输入:start end 输出 fangxiang zou_num
  • 代码块 定义成函数:

def huanxian(start, end):
    fangxiang = ''
    zou_num = 0
    #待实现
    return (fangxiang,zou_num) #可以同时返回两个变量哦~

  • 现在考虑用字典存储 2号线环形信息。(键值对为 当前站名-下一站名)
  • 比如:
    d = {
    '前门’ : '崇文门',
    '崇文门' : ‘北京站‘
    ...
    }
  • 知道了 start 和 end 能不能在字典里找到路径?(思考一下)
  • 大概的思路:循环取字典里的值,再将值作为键,找到下一站(也就是一站站往后循环)

start = '前门'
next = start
next = d[next]
next = d[next]
试一下 在线Python

图示

思路
image.png
  • 实现以下环线算法

def huanxian(start, end):
    fangxiang = ''
    zou_num = 0
    right_d = {'前门':'崇文门','崇文门’:'北京站','北京站':'建国门','建国门’:'朝阳门','朝阳门':'东四十条','东四十条’:'东直门','东直门':'雍和宫','雍和宫’:'安定门','安定门':'鼓楼大街','鼓楼大街’:'积水潭','积水潭':'西直门','西直门’:'车公庄', '车公庄':'阜成门','阜成门':'复兴门','复兴门':'长椿街','长椿街':'和平门','和平门':'前门'} #右行字典
    left_d = {'崇文门':'前门','北京站':'崇文门’,'建国门':'北京站','朝阳门':'建国门’,'东四十条':'朝阳门','东直门':'东四十条’,'雍和宫':'东直门','安定门':'雍和宫’,'鼓楼大街':'安定门','积水潭':'鼓楼大街’,'西直门':'积水潭','车公庄':'西直门’, '阜成门':'车公庄','复兴门':'阜成门','长椿街':'复兴门','和平门':'长椿街','前门':'和平门'} #左行字典
    #环线最优路径算法
    next = start
    right_n = 0 #先尝试右行
    while next != end:
        next = right_d[next] #下一站
        right_n = right_n +1 #走了几站

    next = start
    left_n = 0 #尝试左行
    while next != end:
        next = left_d[next] #下一站
        left_n = left_n +1 #走了几站

    if right_n < left_n:
        fangxiang = '右‘
         zou_num = right_n

    if left_n < right_n:
        fangxiang = '左‘
         zou_num = left_n
    return (fangxiang, zou_num)
试一下 在线Python


  • ”当前站回答法"

def say_dangqian():
    print("现在出站")

  • "问路回答法"

def huida(fangxiang, zou_num):
    #待实现
    a = 0
    while a < zou_num:
        print(fangxiang+'走1站') #一定要4个空格
        a = a + 1

  • 现在来写主程序( 特别短,很好读)

start = '?' #具体执行时填写
end = '?' #具体执行时填写
fangxiang = ''
zou_num = 0
if start == end:
    say_dangqian()
(fangxiang,zou_num) = huanxian(start_num, end_num)
huida(fangxiang, zou_num)


下一章会先复习 字典 的知识,不用担心今天的新知识太多~

p6 知识点总结:


image.png
目录

0基础教程金哥Python自学笔记P0~变量与运算
0基础教程金哥Python自学笔记P1~循环与控制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341