美文网首页
6.Python之字典的基础

6.Python之字典的基础

作者: DonkeyJason | 来源:发表于2018-02-24 14:47 被阅读0次

    字典是针对非系列集合而提供的一种数据类型

     举例: 检测学生信息
         “<键><值> 对”
         键(即身份证号)
         值(即学生信息)
        
     “键值对” 例子
         姓名和电话号码
        用户和密码
         国家名称和首都等
    

    字典的概念

     映射:通过任意键值查找集合中信息的过程
     python中通过字典实现映射
     字典是键值对的集合
        该集合以键为索引
         同一个键信息对应一个值
    

    简单的字典的实例

    passwd = {"China","BigCountry","Korean",:"SmallCountry","France":"MediumCountry"}
    print(passwd)
    
    {'Korean': 'SmallCountry', 'France': 'MediumCountry', 'China': 'BigCountry'}
    

    字典类型与系列类型的区别

     存取和访问方式不同
     键的类型不同
         序列类型只能用数字类型的键
         字典类型可以用其他对象类型作键
    排列方式不同
         系列类型保持了元素的相对关系
         而字典中的数据是无序排列的
     映射方式不同
         系列类型通过地址映射到值
         字典类型通过键直接映射到值
    

    字典的操作

    为字典增加一项

     dictionaryName[key] = value
     举例:
    
    students = {"203-2012-045":"John","203-2012-037":"Peter"}
    students["202-2011-121"] = "Susan" #增加一个新的数据项
    

    访问字典中的值

     dictionaryName[key]返回键key对应的值value
    
     举例:
    
    students["202-2011-121"] = "Susen" #增加一个新的数据项
    students["202-2011-121"]
    

    删除字典中的项

     del divtionaryName[key]
    
     举例:
    
    del students["202-2011-121"]
    

    字典的遍历

     for key in students:
        print(key + ":" +str(students[key]))
        
     举例:
    students = {"203-2012-045":"John","203-2012-037":"Peter"}
    for key in students:
        print(key + ":" +str(students[key]))
    
     遍历字典的键key
        for key in dictionaryName.key():print(key)
     遍历字典的值value
        for value in dictionaryName.values():print(value)
     遍历字典的项
        for item in dictionaryNames():print(item)
     遍历字典的key-value
        for item,value in adict.items():print(item,value)
    

    判断是否一个键在字典中

     in 或者 not in
     举例
    
    students = {"203-2012-045":"John","203-2012-037":"Peter"}
    "203-2012-045" in students
    True
    "203-2014-045" in students
    False
    

    字典的标准操作符

     -,<,>,<=,>=,==,!=,and,or,not
     字典相等测试
    
    d1 = {"red": 41,"blue":3}
    d2 = {"blue":3,"red": 41}
    
    d1 == d2
    
    True
    
    d1!=d2
    False
    

    Python还提供了丰富的字典方法,其中:

    方法 解释
    keys():tuple 返回一个含有字典所有key的列表
    values():tuple 返回一个包含字典多有value的列表
    Items():tuple 返回一个包含所有键值的列表
    clear():None 返回字典中key对应的值
    get(key):val 删除并返回字典中key对应的值
    updata(字典) 将字典中的键值添加到字典中

    方法示例:

    students = {"203-2012-045":"John","203-1012-037":"Peter"}
    tuple(students.keys())
    
    ('203-1012-037', '203-2012-045')
    
    tuple(students.values())
    
    ('Peter', 'John')
    
    tuple(students.items())
    
    (('203-1012-037', 'Peter'), ('203-2012-045', 'John'))
    
    students.get("203-2012-045")
    
    'Peter'
    
    students
    {'203-2012-045': 'John'}
    
    students.clear()
    students
    
    {}
    

    字典实例一

    统计词频

     “统计词频” 问题
         统计文章其中多次出现的词语
         概要分析文章内容
         搜索引擎
    

    统计词频IPO描述

     输入:从文件中读取一篇英文文章
     处理: 统计文件中每个单词出现频率
     输出: 输出最常出现10个单词及次数图像
    

    实现

     第一步:输入英文文章
     第二步: 建立用于词频计算的空字典
     第三步: 对文本的每一行计算词频
     第四步:从字典中获取数据对交换位置,并从大到小排序
     第五步:输出结果
     最后用turtle库绘制统计词频结果图表
    

    符号替换repleacePunctuations(lines()

    def repleacePunctuations(line):
        for ch in line:
            if ch in "~@#%^()_-+=<>?/,.:;{}[]|\""":
                line = line.replace(ch, "")
            return line 
    

    统计词频主程序

     输入英文文本名称
    
    filename = input("Enter a filename:").strip()
    nfile = open(filename, "r")
    
     建立一个空字典
     
    wordCounts = {}
    
     对每一行进行统计
    for line in infile:
        processLine(line.lower(), wordCounts)
        
     词频排序
    pairs = list(wordCounts.items())
    
     交换列表数据项排序
    
    items = [[x,y] for  (x,y) in paris]
    item.sort()
    
     绘制柱状图
         初始化窗口,画笔
         调用drawGraph()进行绘制
        
        turtle.titile("词频统计结果柱状图")
        turtle.setup(900,750,0,0)
        t = turtle.Turtle()
        t.hideturtle()
        t.width(3)
        drawGraph(t)
        
     定义全局变量
    
    # 词频排序显示个数
    count =10
    # 单词频率数组-作为y轴数据
    data = []
    # 单词数组-作为x轴的数据
    words = []
    # y轴显示放大倍数-可以根据词频数量进行调节
    yScale = 6
    #x轴显示放大倍数-可以根据count数量进行调节
    xScale = 30
    
     drawLine()绘制线段
     drawText()绘制文字
    
    #从点(x1,y1)到(x2,y2)绘制线段
    def drawLine(t, x1, y1, x2, y2):
        t.penup()
        t.goto(x1,y1)
        t.pendown()
        t.goto(x2,y2)
        
    #在坐标(x, y)处写入文字
    def drawText(t,  x, y, text):
        t.penup()
        t.goto(x, y)
        t.pendown()
        
        t.write(text)
        
     drawRectangel()绘制矩形
     drawBar()绘制多个柱体
    
    # 绘制一个柱体
    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, 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])
    
    
     drawGrsph()绘制统计图
    
    def drawGraph(t):
        #绘制x/y轴线
        drawLine(t, 0, 0, 360,0)
        drawLine(t,0,300, 0, 0)
        
        #x轴:坐标及描述
        for x in range(count):
            x = x+1# 向右移一位,为了不画在原点上
            drawText (t, x*xScale- 4, -20, (words[x-1]))
            drawTest(t,x*xScale-4, data[x-1]*yScale[x-1]*yScale+10, data[x-1])
        drawBar(t)    
    

    字典实例二

     同前,有电话簿TeleAddressBook和邮箱地址簿EmailAddessBook两个文件,使用字典结构将其合并为一个完整的AddressBook文件
    
     打开文件并读取文件
     将文件的多行数据存储至lines1,lines2变量中
    
    ftele1.readline() #跳过第一行
    ftele2.readline()
    lines1 = ftele1.readlines()
    lines2 = ftele2.readlines()
    
     建立空字典dic1,dic2存储姓名,电话和邮箱:
    dic1 = {}
    dic2 = {}
    
     获取TeleAdressBook中的信息:
    for line in lines1:#获取第二个文本中的姓名和电话信息
        elements = line.split()
        dic1[elements[0]] = str(elements[1].decode('gbk'))
     获取EmailAddressBook中的信息:
    for line in line2:
        elements = line.split()
        dic2[elements[0]] = str(elements[1].decode('gbk'))
    

    文本合并处理

     生成新的数据表头
     按字典键的操作遍历姓名列表1
         处理与表2重名的信息
         处理其他信息
     处理列表2 中剩余的姓名
    
     按字典键的操作遍历姓名
    
    for key in dic1:
        s = ''
        if key in dic2.keys():
            s = '\t'.join([str(key.decode('gbk')), dic1[key], dic2[key]])
        else:
            s = '\t'.join([str(key.decode('gbk')), dic1[key], str('   ----  ')
            s += '\n'
        lines.append(s)
        
     处理列表2 中剩的姓名
     将新生成的合并数据写入新文件
     关闭文件

    相关文章

      网友评论

          本文标题:6.Python之字典的基础

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