美文网首页100天自学大数据
《金哥百变Python零基础教程6》~字典

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

作者: 金哥数据分析 | 来源:发表于2020-05-28 14:19 被阅读0次

    本章知识点 :> 字典

    北京地铁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~循环与控制

    相关文章

      网友评论

        本文标题:《金哥百变Python零基础教程6》~字典

        本文链接:https://www.haomeiwen.com/subject/clwpahtx.html