#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. Mantis优化改造(功能篇)

    共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ...

  2. iptables 使用总结

    Linux 系统的防火墙功能是由内核实现的 2.0 版内核中,包过滤机制是 ipfw,管理工具是 ipfwadm 2.2 版内核中,包过滤机制是 ipchain,管理工具是 ipchains 2.4 ...

  3. safari 日期显示NAN

    解决方案: 1.服务器端将时间转换为时间戳,前端再进行处理,问题解决. fastjson,JSON.toJSONString() 自动将时间字段转换为时间戳类型,然后传到前端. @RequestMap ...

  4. jquery $.trim()方法的介绍

    http://www.jb51.net/article/50282.htm

  5. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

  6. Codeforces Round #542(Div. 2) C.Connect

    链接:https://codeforces.com/contest/1130/problem/C 题意: 给一个n*n的图,0表示地面,1表示水,给出起点和终点, 现要从起点到达终点,有一次在两个坐标 ...

  7. Lucky Array Codeforces - 121E && Bear and Bad Powers of 42 Codeforces - 679E

    http://codeforces.com/contest/121/problem/E 话说这题貌似暴力可A啊... 正解是想出来了,结果重构代码,调了不知道多久才A 错误记录: 1.线段树搞混num ...

  8. RHEL 6.5----CDN(lumanger)

    主机名  IP   服务 master 192.168.30.130  CDN(LuManager) slave 192.168.30.131  DNS  软件安装包下载地址及安装方法 http:// ...

  9. re正则表达式公式讲解5

    1.refullmatch() 完全匹配字符串则返回object,否则返回None import re s = "max@123uyt146" print(re.fullmatch ...

  10. poj1724 ROADS

    题意: N个城市,编号1到N.城市间有R条单向道路.每条道路连接两个城市,有长度和过路费两个属性.Bob只有K块钱,他想从城市1走到城市N.问最短共需要走多长的路.如果到不了N,输出-12<=N ...