Python字典详解

来源:互联网 发布:最新好听网络歌曲 编辑:程序博客网 时间:2024/06/06 00:51

字典:键值对的集合,该集合以键为索引,同一个键对应一个值,为一个容器类型

举例:检索学生或员工信息

<><>对 键(身份证号码) 值(学生信息)

 

字典操作:

创建字典:

>>> ainfo={'qw':12,'er':34}>>> binfo=dict([('qw',12),('er',12)])>>> cinfo=dict([['qw',12],['er',12]])>>> dinfo=dict(name='Bill',age=56)>>> ainfo{'qw': 12, 'er': 34}>>> binfo{'qw': 12, 'er': 12}>>> cinfo{'qw': 12, 'er': 12}>>> dinfo{'name': 'Bill', 'age': 56}

初始化字典:

>>> #fromkeys第一个参数是序列类型>>> aDict={}.fromkeys(('ycg','sx'),30)>>> aDict{'ycg': 30, 'sx': 30}>>> sorted(aDict)['sx', 'ycg']

使用两个列表创建

a=['qw','rt','yu']b=['zx','cv','nm']fdict=dict(zip(a,b))print(fdict)

添加项:students["2017"]="qwe"

删除键值对:del students["2017"]

遍历字典:

for key in students:

    print key+','+students[key]

遍历字典的键:

for key in students.keys():

    print key

遍历字典的值:

for value in students.values():

    print value

遍历字典的项:

for item in students.items():

    print item

判断键是否

在字典中:in/not in,返回True或者False

字典作为函数的参数:

>>> def f(arg1,*argt,**argd):print(arg1)print(argt)print(argd)>>> f('q','qq','ww',a1=1,a2=2)q('qq', 'ww'){'a1': 1, 'a2': 2}

字典方法:



字典实例一:查询英文文章中出现字数前5多的单词并以图表形式输出


输入用例:article.txt文件:

don't know what I do now is right, those are wrong, and when I finally Laosi when I know these. So I can do now is to try to do well in everything, and then wait to die a natural death.Sometimes I can be very happy to talk to everyone, can be very presumptuous, but no one knows,  I can make him very happy very happy, but couldn't find the source of happiness, just giggle.

# -*- coding: utf-8 -*-from math import *from turtle import *wordcounts={}#用字典存储单词的数量countwords = []#将字典中的键值反转存入列表,便于排序count=5xscale=30#x轴放大倍数yscale=20#y轴放大倍数xlabel=[]#存储单词,用于x轴显示ylabel=[]#存储单词数量,用于y轴显示#句子中的标点符号替换为空格def replacepunctuations(line):    for ch in line:        if ch in ",.;'":            line=line.replace(ch,' ')    return line#处理每一行并更新字典def processline(line):    words=replacepunctuations(line).split()    for word in words:        if word in wordcounts:            wordcounts[word]+=1        else:            wordcounts[word]=1#(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)#画条状图def drawbar(t,x,y,text):    x=x*xscale    y=y*yscale    drawtext(t,x,y,y/yscale)    drawtext(t,x,-20,text)    drawline(t, x - 5, 0, x - 5, y)    drawline(t, x - 5, y, x + 5, y)    drawline(t, x + 5, y, x + 5, 0)def drawgraphy(t):    drawline(t,0,0,200,0)    drawline(t,0,0,0,150)    for i in range(0,count):        x=i+1        drawbar(t,x,countwords[i][0],countwords[i][1])def main():    f = open("article.txt", "r")    for line in f:        processline(line)    print wordcounts    xlabel = wordcounts.keys()    ylabel = wordcounts.values()    #键值反转并排序    for [y, x] in wordcounts.items():        countwords.append([x, y])    countwords.sort()    countwords.reverse()    p=Turtle()    p.pensize(3)    p.hideturtle()    drawgraphy(p)    done()main()

输出:


字典实例二:

文件合并实例:

TelInformation.txt
姓名: 电话:
嘻嘻 1333333
男男 82782

EmailInformation.txt

姓名: 邮箱:
嘻嘻 123@163.com
东东 124@qq.com

Information.txt
嘻嘻 1333333 123@163.com
男男 82782 not have email
东东 not have tel 124@qq.com

# -*- coding: utf-8 -*-from math import *from turtle import *def main():    f1=open("TelInformation.txt","r")    f2=open("EmailInformation.txt","r")    f3=open("Information.txt","w")    f1.readline()    f2.readline()    lines1=f1.readlines()    lines2=f2.readlines()    dicttel={}    dictemail={}    list=[]    for line in lines1:        information=line.split()        dicttel[information[0]]=information[1]    for line in lines2:        information = line.split()        dictemail[information[0]] = information[1]    for line in dicttel.keys():        if line in dictemail:            list.append(line+' '+dicttel[line]+' '+dictemail[line]+'\n')        else:            list.append(line + ' ' + dicttel[line] + ' not have email\n')    for line in dictemail.keys():        if line not in dicttel:            list.append(line + ' ' + ' not have tel'+dictemail[line]+'\n')    f3.writelines(list)    f1.close()    f2.close()    f3.close()main()