映射: 是一种建(索引)和值(数据)的对应
采用{}和dict()创建,键值对用:表示
d = {‘中国’:‘北京’, ‘美国’:‘华盛顿’,‘法国’:‘巴黎’}
索引时:d[‘中国’]
‘北京’
空字典:{}
空集合:set()
del d[k]: 删除键k对应的数据值
k in d: 判断键k是否在字典中
d.keys() :返回字典中所有的键信息,但是不是一个列表类型,是一种字典的k类型
d.values(): 返回字典中所有的值信息,是字典的value类型
dict_values([‘北京’, ‘华盛顿’, ‘巴黎’])
d.items(): 返回字典中所有键值对的信息
d.get(k, ): 键k存在,则返回相应值,不存在就返回default的值
d.pop(k,default) : 键k存在,则取出相应值,
d.popitem(): 随机从字典d中取出一个键值对,以元组形式返回
d.clear(): 删除所有的键值对
len(d): 返回字典d中元素的个数
主要作用:
用恰当的一组键值表达之间的关系
#对文本进行降噪处理
def gettext():
with open('hamlet.txt','r') as f:
txt = f.read()
txt = txt.lower() #降噪处理,先将大写变小写
#将特殊符号用空格替换掉
for ch in '!@#$%^&*0|~:;<>=':
txt = txt.replace(ch, '')
return txt
hamlettxt = gettext()
words = hamlettxt.split() #默认以空格方式进行分隔,并且返回一个列表
counts = {}#创建一个新字典,获得词频
#两行代码实现词频统计
for word in words:
counts[word] = counts.get(word, 0)+1 #以当前的某个英文单词作为键值,对其次数进行索引
#讲字典变为列表
items = list(counts.items()) #列表里的每个元素是以元组的形式存在的
#对列表内元素进行排序
items.sort(key=lambda x:x[1],reverse=True)#按照x值的第二个及键值由大到小进行排序
for i in range(10):
word, count = items[i]
print('{0}:{1}'.format(word, count), end =' ')
中文三国演义
import jieba
with open('三国演义.txt', 'r') as f:
txt = f.read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word, 0)+1
items = list(counts.items()) #将字典中所有的键值对(元素)取出,再转换为列表的格式
items.sort(key=lambda x:x[1], reverse = True)
for i in range(15):
word, count = items[i]
print('{0}:{1}'.format(word, count), end = ' ')
将与人物姓名无关的词进行排除
import jieba
with open('三国演义.txt', 'r') as f:
txt = f.read()
words = jieba.lcut(txt)
excludes = {'历史','三国演义','人物','性格','赤壁之战','评价'}
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == '诸葛亮' or word == '孔明曰':
reword = '孔明'
else:
reword = word
counts[reword] = counts.get(reword, 0)+1
for word in excludes:
del counts[word]
items = list(counts.items()) #将字典中所有的键值对(元素)取出,再转换为列表的格式
items.sort(key=lambda x:x[1], reverse = True)
for i in range(15):
word, count = items[i]
print('{0}:{1}'.format(word, count), end = ' ')