赵从文芜湖123 发表于 2021-8-15 15:40:38

python

我:
fo = open("命运-网络版.txt", "r", encoding = "utf-8")
fi = open("命运-字符统计.txt", "w", encoding = "utf-8")
text = fo.read()#两个遍历***排序
d = {}
ls1 = []
for i in text:
    d = d.get(i,0) + 1
del d['\n']
for key in d:
    ls1.append('{}:{}'.format(key,d))
ls1.sort(key = lambda x:x,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 = d.get(c, 0) + 1
    del d['\n']
    ls = list(d.items())
    ls.sort(key=lambda x:x, reverse=True)
    for i in range(100):
      ls = "{}:{}".format(ls, ls)
    fo.write(",".join(ls[:100]))
    fi.close()
    fo.close()


为什么我写的结果没有排序呢,可是我在调试的时候,确实排序了。答案排序了。

Pliosauroidea 发表于 2021-8-15 17:09:29

你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_items,list将其转化为列表,此列表中的每一项都是一个(字符,出现次数)的元组
此时对ls进行排序,key就是元组中的出现次数

而你的做法是现将字典转化成字符串,再进行比较,此时比较的实际上是《字符串的第三位》而不是《字符出现次数》,即如果有两个字符出现次数分别为15,180,则你的sort方法无法正确排序,于是出现了类似未排序的结果,其实你的方法造成的结果是对出现次数的最高位进行了排序。

Pliosauroidea 发表于 2021-8-15 17:11:04

Pliosauroidea 发表于 2021-8-15 17:09
你比较一下两边代码就会发现问题,示例代码中有ls=list(d.items)
d.items返回一个键值对元素组成的dict_it ...

调试的时候发现可以排序可能是你调试时用的输入字符串中的重复次数都不超过10,此时字符串第三位=字符出现次数,于是可以正确排序。

赵从文芜湖123 发表于 2021-8-15 17:20:23

感谢,确实没有考虑到。
页: [1]
查看完整版本: python