• 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的42-45讲 {字典}


    #coding=gbk
    #嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的42-45讲 {字典}
    #字典:针对非序列集合而提供的一种数据类型
    # 字典是无序的!!!!!
    #字典类型与序列类型的区别:
    # 存取和访问方式不同
    # 键类型不同,序列类型只能用数字类型的键,字典类型可以用其它对象作为键,如数字,字符串,元组等。
    # 序列类型有序,字典类型无序
    # 序列类型通过地址映射到值,字典中的键直接映射到值
    #
    #字典的操作
    #为字典增加一项:dictionaryName[key] = value
    #访问字典中的值:dictionaryName[key]返回键key对应的值value,若键不存在,则报错
    #删除字典中的一项:del dictionaryName[key]
    #字典的遍历:for key in dictionaryName:
    # print(key + ":" + str(dictionaryName[key]))
    #遍历字典的键:for key in dictionaryName.keys():print(key)
    #遍历字典的值:for value in dictionaryName.values():print(value)
    #遍历字典的项:for item in dictionaryName.items():print(item)
    #遍历字典的键值:for item,value in dictionaryName.items():print(item,value)
    #
    #是否一个键在字典中用in not in指令
    #字典的标准操作符:
    #-,<, >, <=, >=, ==, !=, and, or, not
    #
    #字典方法
    #keys():tuple 返回一个包含字典所有key的列表
    #values():tuple 返回一个包含字典所有value的列表
    #items():tuple 返回一个包含所有键值的列表
    #clear():None 删除字典中的所有项目
    #get(key):value 返回字典中key对应的值
    #pop(key):value 删除并返回字典中Key对应的值
    #update(字典) 将字典中的键值添加到字典中
    """
    #英文文本文件词频统计程序
    import turtle
    #全局变量
    #词频非排列显示个数
    count = 10
    data = []
    words = []
    yScale = 0.3 #y轴显示放大倍数可以根据词频统计数量count进行调整
    xScale = 30 #x轴显示放大倍数可以根据词频统计数量count进行调整

    def drawLine(t,x1,y1,x2,y2): #从点(x1,y1)到(x2,y2)绘制线段
      t.penup()
      t.goto(x1,y1)
      t.pendown()
      t.goto(x2,y2)

    def drawText(t,x,y,text): #在坐标(x,y)处写文字
      t.penup()
      t.goto(x,y)
      t.pendown()
      t.write(text)

    def drawGraph(t): #绘制x/y轴线
      drawLine(t,0,0,360,0)
      drawLine(t,0,300,0,0)

      for x in range(count):
        x += 1 #向右移一位,为了不画在原点上
        drawText(t, x*xScale-4, -20, (words[x-1]))
        drawText(t, x*xScale-4, data[x-1]*yScale+10, data[x-1])
      drawBar(t)

    def drawRectangle(t, x, y):
      x = x*xScale
      y = y*yScale #放大倍数显示
      drawLine(t, x-5, 0, x-5, y)
      drawLine(t, x-5, y, x+5, y)
      drawLine(t, x+5, y, x+5, 0)
      drawLine(t, x+5, 0, x-5, 0)

    def drawBar(t):
      for i in range(count):
        drawRectangle(t, i+1, data[i])

    def processLine(line, wordCounts): #对文本的每一行计算词频的函数
      #用空格替换标点符号
      line = replacePunctuations(line)
      #从每一行获取每一个词
      words = line.split()
      for word in words:
        if word in wordCounts:
          wordCounts[word] += 1
        else:
          wordCounts[word] = 1

    #空格替换标点的函数
    def replacePunctuations(line):
      for ch in line:
        if ch in "~!@#$%^&*()-_+=[]{}|;:'""<>,./?":
          line = line.replace(ch, '')
        return line

    def main():
      filename = input("请输入一个英文编写的文本文件: ").strip()
      infile = open(filename, 'r')
      
      #建立用于计算词频的空字典
      wordCounts = {}
      for line in infile:
        processLine(line.lower(), wordCounts)

      #从字典中获取数据对
      pairs = list(wordCounts.items())

      #列表中的数据对交换位置,数据对排序
      items = [[x, y] for (y,x) in pairs]
      items.sort()

      #输出count数量的词频结果
      for i in range(len(items)-1, len(items)-count-1, -1):
        print(items[i][1] + " " + str(items[i][0]))
        data.append(items[i][0])
        words.append(items[i][1])

      #根据词频结果绘制柱状图
      turtle.title("词频统计结果柱状图")
      turtle.setup(900, 750, 0, 0)
      t = turtle.Turtle()
      t.hideturtle()
      t.width(3)
      drawGraph(t)

      #调用main()函数
      if __name__ == '__main__':
        main()

    main()
    """

    ftele1 = open(r'C:UsersfengboDesktop电话1106.txt','rb')
    ftele2 = open(r'C:UsersfengboDesktop邮箱1106.txt','rb')

    ftele1.readline() #跳过第一行
    ftele2.readline() #跳过第一行
    lines1 = ftele1.readlines()
    lines2 = ftele2.readlines()
    dic1 = {}
    dic2 = {}

    for line in lines1:
      elements = line.split()
      dic1[elements[0]] = str(elements[1].decode('gbk'))

    for line in lines2:
      elements = line.split()
      dic2[elements[0]] = str(elements[1].decode('gbk'))


    #电话邮箱合并程序
    lines = []
    lines.append('姓名 电话 邮箱 ')

    for key in dic1:
      s = ''
      if key in dic2.keys():
        s = ' '.join([str(key.decode('gbk')), dic1[key], dic2[key]])
        s += ' '
      else:
        s = ' '.join([str(key.decode('gbk')), dic1[key], str(' ----- ')])
        s += ' '
      lines.append(s)

    for key in dic2:
      s = ''
      if key not in dic1.keys():
        s = ' '.join([str(key.decode('gbk')), str(' ----- '), dic2[key]])
        s += ' '
      lines.append(s)

    ftele3 = open(r'‪C:UsersfengboDesktop电话邮箱1106.txt', 'w')
    ftele3.writelines(lines)
    ftele3.close()
    ftele2.close()
    ftele1.close()

  • 相关阅读:
    minio临时凭证 下载大文件合并UInt8Arrays
    elupload 传参
    [k8s] 创建sa类型的kubeconfig
    JAVA字符流写数据的五种方式 145
    JAVA copy多级目录文件
    JAVA线程实现的第二种方式
    JAVA 序列化类168
    JAVA 字符流复制JAVA文件 147
    JAVA UDP发送案例
    JAVA中多线程的数据安全问题
  • 原文地址:https://www.cnblogs.com/fengbo1113/p/7798505.html
Copyright © 2020-2023  润新知