Python数据类型结构( 三 )


字典移除键值 .pop()
.pop("")
##给定一个字典,然后计算它们所有数字值的和 。计算key 对应的键值test_dict = {"Runoob" : 1, "Google" : 2, "Taobao" : 3, "Zhihu" : 4}del(test_dict['Zhihu'])print (test_dict) test_dict = {"Runoob" : 1, "Google" : 2, "Taobao" : 3, "Zhihu" : 4} ### 输出原始的字典###使用 pop 移除 Zhihuremoved_value = http://www.kingceram.com/post/test_dict.pop('Zhihu',"有无此数")print(removed_value)tmp=test_dict.pop('Google')print(tmp)# 输出移除后的字典print ("字典移除后 : " + str(test_dict)) print ("移除的 key 对应的 value 为 : " + str(removed_value)) print ('\r') ##使用 pop() 移除没有的 key 不会发生异常,我们可以自定义提示信息removed_value = http://www.kingceram.com/post/test_dict.pop('Baidu', '没有该键(key)') tmp=test_dict.pop("Google")print(tmp)print(str(tmp))print(str(test_dict))# 输出移除后的字典print ("字典移除后 : " + str(test_dict)) print ("移除的值为 : " + str(removed_value))print("..######..\n..#....#..\n..######..", end = " ")
字典到列表的转化
字典-键值-排序
字典排序不是你看的那个样子,字典排序有那个固定的键值一一对应 。建议转化为列表 。
当转化为列表的时候,发现确实成功了 。字典和列表的转化如下:
dic1={"北京":34,"上海":34,"广州":32}list1=list(dic1.items())print("字典到列表",list1)myList.sort(key=lambda x:x[1],reverse=True)#按照列表排列
字典-get(,)+1
运行如下代码:
【Python数据类型结构】myDict={2:23,3:333,4:444}print(myDict.get(5,0))#运行结果为:0因为字典中的键key 并没有5 。print(myDict.get(2))#运行结果为:23#如果字典中没有该键,则用get(, ),输出了myvalue
但是,可以优化以上代码,尝试下面的格式
for ilist in mylist:xing=ilist[0]xingDict[xing]=xingDict.get(xing,0)+1#如此步骤更少 。
.items()
resultFile=open("/mytest.txt","w",encoding="utf-8")numDict={x:x**2 for x in range(1,20) if x%2==0}for (k,v) in numDict.items():print((k,v),file=resultFile)resultFile.close()for x in range(20,1,-1):print(x)
字典-列表解析-ord-chr
用字典生成字母,并用列表对应 。
myDict={chr(x):0 for x in range(ord("a"),ord("z")+1)}myList=list(myDict.items())print(myList)
生成结果如下:
[('a', 0), ('b', 0), ('c', 0), ('d', 0), ('e', 0), ('f', 0), ('g', 0), ('h', 0), ('i', 0), ('j', 0), ('k', 0), ('l', 0), ('m', 0), ('n', 0), ('o', 0), ('p', 0), ('q', 0), ('r', 0), ('s', 0), ('t', 0), ('u', 0), ('v', 0), ('w', 0), ('x', 0), ('y', 0), ('z', 0)]
可以直接生成字典形式,并转化为列表 。
利用字典进行词频统计
简要代码如下:
#灵活运用字典的键,值 。可以分开操作 。list=[2,4,5,3,2,6,4]dic1={2:34,3:34,9:32}for key in dic1:if key in list:#想出这样简洁的语法不容易 。dic1[key]=0print(dic1)#参看作业—名著词频统计 。
利用字典统计文本数据,具体案例如下
#打开两个文件storyFile=open("TheStoryoftheStone.txt","r",encoding="utf-8")#打开文件guyFile=open("AllMenAreBrothers.txt","r",encoding="utf-8")#打开文件storyData=storyFile.read() #读取数据,字符串guyData=guyFile.read() #读取数据,字符串storyFile.close() #关闭文件guyFile.close() #关闭文件storyHZ={} #红楼梦的字频for singleHZ in storyData:if singleHZ==" " or singleHZ =="\n":continueif singleHZ not in storyHZ:storyHZ[singleHZ]=1else:storyHZ[singleHZ]+=1#print(storyHZ)guyHZ={} #水浒传的字频for singleHZ in guyData:if singleHZ==" " or singleHZ =="\n":continueif singleHZ not in guyHZ:guyHZ[singleHZ]=1else:guyHZ[singleHZ]+=1#print(guyHZ)totalHZ={}#计算所有汉字的集合allHZ=set(storyHZ)|set(guyHZ) #得到所有汉字的集合#得到每个汉字分别在红楼梦和水浒传中出现的次数for singleHZ in allHZ:if singleHZ==" " or singleHZ =="\n":continue#计算出在红楼梦对应汉字的次数storySingleHZCount=0 #保存红楼梦中汉字出现次数if singleHZ in storyHZ:storySingleHZCount=storyHZ[singleHZ]#计算出在《水浒传》对应汉字的次数guySingleHZCount=0 #保存水浒传中汉字出现次数if singleHZ in guyHZ:guySingleHZCount=guyHZ[singleHZ]#合并存入字典totalHZ[singleHZ]=(storySingleHZCount,guySingleHZCount)print(totalHZ.items())#排序dataAfterSorted=list(sorted(totalHZ.items(),key=lambda X:X[1][0]+X[1][1],reverse=True))#print(dataAfterSorted[:100])wFile=open(r"D:\PKU\课堂教学\2019Autumn\FCA\课堂程序\20191030\HZ.txt","w",encoding="utf-8")for everyHZ in dataAfterSorted[:100]:print(everyHZ[0],everyHZ[1][0],everyHZ[1][1],sep=",",file=wFile) #输出到文件wFile.close() #关闭文件