|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我:
fo = open("命运-网络版.txt", "r", encoding = "utf-8")
fi = open("命运-字符统计.txt", "w", encoding = "utf-8")
text = fo.read()#两个遍历 ***排序
d = {}
ls1 = []
for i in text:
d[i] = d.get(i,0) + 1
del d['\n']
for key in d:
ls1.append('{}:{}'.format(key,d[key]))
ls1.sort(key = lambda x:x[2],reverse = True)
ls2 = ls1[:100]
fi.write(','.join(ls2))
fo.close()
fi.close()
参考:
names = ["命运", "寻梦"]
for name in names:
fi = open(name+"-网络版.txt", "r", encoding="utf-8")
fo = open(name+"-字符统计.txt", "w", encoding="utf-8")
txt = fi.read()
d = {}
for c in txt:
d[c] = d.get(c, 0) + 1
del d['\n']
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True)
for i in range(100):
ls[i] = "{}:{}".format(ls[i][0], ls[i][1])
fo.write(",".join(ls[:100]))
fi.close()
fo.close()
为什么我写的结果没有排序呢,可是我在调试的时候,确实排序了。答案排序了。
你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_items,list将其转化为列表,此列表中的每一项都是一个(字符,出现次数)的元组
此时对ls进行排序,key就是元组中的出现次数
而你的做法是现将字典转化成字符串,再进行比较,此时比较的实际上是《字符串的第三位》而不是《字符出现次数》,即如果有两个字符出现次数分别为15,180,则你的sort方法无法正确排序,于是出现了类似未排序的结果,其实你的方法造成的结果是对出现次数的最高位进行了排序。
|
|