#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] + "\t" + 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:\Users\fengbo\Desktop\电话1106.txt','rb')
ftele2 = open(r'C:\Users\fengbo\Desktop\邮箱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('姓名\t 电话 \t 邮箱\n')

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

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

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

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

  1. 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=15873837810484552531 中的15-23讲

    #coding=gbk#嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=1587383 ...

  2. 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=15873837810484552531 中的1-14讲

    #coding=gbk#嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=1587383 ...

  3. 【雕爷学编程】零基础Python(01)---“投机取巧”的三条途径

    从3月13日报名尝试上网课学习(4天课8.9元),开始接触Python(中文发音“派森”),到今天有一星期了.这两天广泛搜索了一下相关的学习途径,本着“投机取巧”的出发点,居然小有心得,这里一并分享出 ...

  4. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  5. 零基础Python应该怎样学习呢?(附视频教程)

    Python应该怎样学习呢? 阶段一:适合自己的学习方式 对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编建议可以采用视频+书籍的方式进行学习.看视频学习可以让你迅速掌握编程的基础语法 ...

  6. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  7. 零基础Python接口测试教程

    目录 一.Python基础 Python简介.环境搭建及包管理 Python基本语法 基本数据类型(6种) 条件/循环 文件读写(文本文件) 函数/类 模块/包 常见算法 二.接口测试快速实践 简单接 ...

  8. Spark (Python版) 零基础学习笔记(一)—— 快速入门

    由于Scala才刚刚开始学习,还是对python更为熟悉,因此在这记录一下自己的学习过程,主要内容来自于spark的官方帮助文档,这一节的地址为: http://spark.apache.org/do ...

  9. Spark (Python版) 零基础学习笔记(二)—— Spark Transformations总结及举例

    1. map(func) 将func函数作用到数据集的每个元素,生成一个新的分布式的数据集并返回 >>> a = sc.parallelize(('a', 'b', 'c')) &g ...

随机推荐

  1. 为什么wait,notify和notifyAll要与synchronized一起使用?

    https://blog.csdn.net/qq_39907763/article/details/79301813 Object.wait(),Object.notify(),Object.noti ...

  2. UvaLive6441(期望概率dp)

    1.涉及负数时同时维护最大和最小,互相转移. 2.考场上最大最小混搭转移WA,赛后发现如果是小的搭小的,大的搭大的就可过,类似这种: db a = (C[i] - W[i]) * dp1[i - ][ ...

  3. vue项目node升级后,node-saas报错解决办法

    ERROR in ./node_modules/_extract-text-webpack-plugin@3.0.2@extract-text-webpack-plugin/dist/loader.j ...

  4. 使用VMwaver 克隆CentOS 6.9网卡配置报错

    报错信息: 克隆完成之后,使用的是NAT模式,进入系统之后有IP地址也可以ping外网,但是没有ifcfg-eth0这个文件,使用setup命令配置网卡时报以下错误: 待解决-

  5. 进程间通信的两种实现方式(IPC)

    进程间通信的两种实现方式(IPC) IPC: iter processing communicate 进程间通信:IPC(iter process communicate)linux free-m 可 ...

  6. vmware桥接模式下主机有多个网卡导致虚拟机网络不通

    桥接模式下,vmware会绑定一个物理网卡,因此有多个物理网卡时就要注意当前绑定的物理网卡.打开如下vmware菜单 可以看到VMnet0是桥接模式用的,然后他可以选择绑定一个物理网卡,注意要正确选择 ...

  7. spark性能优化-JVM虚拟机垃圾回收调优

    1 2 3 4

  8. java比较日期大小及日期与字符串的转换【SimpleDateFormat操作实例】

    java比较日期大小及日期与字符串的转换[SimpleDateFormat操作实例] package com.ywx.test; import java.text.ParseException; im ...

  9. 微信小程序开发系列七:微信小程序的页面跳转

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  10. navicat 链接数据库查看的工具 可以同时查看各种数据库 MySql SqlServer

    navicat 链接数据库查看的工具 Navicat_Premium_10.0.11.0_XiaZaiBa