字典是Python的一种数据结构,像数学中的映射集合,可以理解为由键和值成对存在的单元构成的一个列表。
一.字典构造形式:
1.字典名 = {键名1:值1 ,键名2:值2 ,键名3:值3}
例如 :Dic = {‘op‘:55 , 3:(‘a‘,‘b‘) , ‘q‘:[1.25,‘score‘,5]}
其中键只能是不可改变对象(如元组,字符串,整数等)和值可以为任意的对象
2.可以使用dict()或{}构造一个空的字典如 Dic=dict() DIc={}
二.字典的索引:
1.字典可以使用 [ ] 运算符,但与之前的列表元组等不同,字典不可以使用顺序的数字作为索引如 1,2,-1等
2.字典需要使用键值作为索引,如1.的例子中,可以使用如下的索引方法 Dic[‘op‘] Dic[3] Dic[‘q‘]
3.既然字典的值可以是任意对象,那么就有可能为列表,元组,甚至是字典。那么当值为上述对象时候,使用字典名[键值]方式将得到一个集合,由此我们可以使用一个二维的方法进行索引
范例:
>>> Dic={‘a‘:{‘q‘:‘hello‘ , ‘w‘:‘how‘ , ‘e‘:‘Thanks‘}} >>> Dic[‘a‘][‘e‘] ‘Thanks‘
一维结果为列表的话,二维的[]变可以使用顺序的数字索引
以此类推,当二维键所对应的值仍为字典等集合时,可以继续这样使用:
>>> Dic={‘a‘:{‘q‘:‘hello‘ , ‘w‘:‘how‘ , ‘e‘:{‘u‘:‘yes‘}}} >>> Dic[‘a‘][‘e‘][‘u‘] ‘yes‘
4.如果在索引时,输入的键值不存在,Python将报错
三.字典的赋值:
赋值方法为 字典名[键名] = 值 以此形成一个映射关系
当待赋值的键名不存在时,python将直接在该字典中加入此键值对
四.与字典有关的操作:
[]:在方括号中使用键进行索引
len():计算出的长度为字典中键值对的个数
in:成员测试,判断键是否在该字典中
for:循环找出字典中每个键值对
五.字典方法:
items() : 生成所有键值对的元组列表
keys() : 生成所有键的列表
values(): 生成所有值的列表
copy() : 对字典进行浅拷贝 (引用关系)
六.一个实例
以《葛底斯堡演说》为例进行分析,判断其中的单词数和对应的频率,并进行排序显示
import string def addword (word,Wdict): #将word单词加入字典统计,没有添加键值对,有则值+1 if(word in Wdict): Wdict[word]+=1 else: Wdict[word]=1 def collect(line,Wdict): #对line字符串进行分析,并拆分出有效单词加入到字典 line = line.strip() wordline = line.split() for word in wordline: if(word == ‘--‘): continue word = word.strip(string.punctuation) word = word.lower() addword(word,Wdict) def Printf(Wdict): #对字典内容排序输出函数 resultwords = [[val,key] for key,val in Wdict.items()] resultwords.sort(reverse=True) print("%-12s%-10s"%(‘word‘,‘Count‘)) print(‘-‘*21) for Count,Word in resultwords: if(Count>2): print("%-13s%-3d"%(Word,Count)) Wdict = {} #在这也可以将下面的代码封装到main(),然后执行main()运行程序 FileODJ = open(‘wordtest.txt‘,‘rU‘) for line in FileODJ: collect(line,Wdict) Printf(Wdict)