美文网首页
Day049|Python300例之统计字符串各单词频次并排序输

Day049|Python300例之统计字符串各单词频次并排序输

作者: 龙渊的宝藏 | 来源:发表于2021-04-15 00:27 被阅读0次

    今天是Andy学Python的第49 天哦! 

    大家好,我是Andy。

    昨天学习了计算字符串中单词出现的数量,今天继续研究,如何实现字符串中各单词出现频次并排序输出。

    01.

    项目需求

    统计字符串中单词出现频次并排序输出。 

    02.

    任务拆解

    2.1 清洗数据,将字符串中的逗号、句号、问号替换为空格(本节只适用于字符串中最多只有逗号、句号、问号或空格的英文字符串)。

    2.2 提取单词,使用split()将字符串分割为单词。

    2.3 统计各单词出现次数,建立word空字典,采用字典get()方法,默认值为0,出现一次+1;也可用set()去重,再用count()计数。

    2.4 排序输出,按字典中值的大小排序。

    03.

    代码实现

    3.1版本1.0

    def count_str_word(s):  # 统计字符串单词频次,参数 s 代表字符串

        a = s.replace(",", " ")  # 将逗号替换为空格

        a = a.replace(".", " ")  # 将句号替换为空格

        a = a.replace("?", " ")  # 将问号替换为空格

        word ={}

        for i in a.split():

            word[i] = word.get(i,0)+1  # 统计i出现次数

        return word

    count_str = input("Please input a string:\n")

    print(count_str_word(count_str))

    该版本实现了从字符串中清洗多余的标点,转换为单词并计算出现频次。

    3.2字典按值排序

    查阅资料,发现sorted()函数可实现对字典按键或值排序,需要运用lambda匿名函数。

    方法如下:

    d = {"a":1, "b":5, "c":2, "d":4}

    a = sorted(d.items(), key = lambda x : x[0])  # 按键名排序

    a1 = sorted(d.items(), key = lambda x : x[0],reverse = True)

    b = sorted(d.items(), key = lambda x : x[1])  # 按值排序

    b1 = sorted(d.items(),key = lambda x : x[1],reverse = True)

    print(a)

    print(a1)

    print(b)

    print(b1)

    3.3 版本2.0

    # 版本2.0

    def count_str_word(s):  # 统计字符串单词频次,参数 s 代表字符串

        a = s.replace(",", " ")  # 将逗号替换为空格

        a = a.replace(".", " ")  # 将句号替换为空格

        a = a.replace("?", " ")  # 将问号替换为空格

        word ={}

        for i in a.split():

            word[i] = word.get(i,0)+1  # 统计i出现次数

        result = sorted(word.items(),key = lambda x : x[1], reverse = True)

        return result

    count_str = input("Please input a string:\n")

    print(count_str_word(count_str))

    3.4 版本2.1

    使用set()去重,用count()计算单词在列表中出现次数,并传入字典。

    其他与版本2.0相同。

    # 版本2.1

    def count_str_word(s):  # 统计字符串单词频次,参数 s 代表字符串

        a = s.replace(",", " ")  # 将逗号替换为空格

        a = a.replace(".", " ")  # 将句号替换为空格

        a = a.replace("?", " ")  # 将问号替换为空格

        b = a.split()

        w =set(b)   # 去重

        word = {}  

        for i in w:

            word[i] = b.count(i)  # 将单词在列表中出现次数传入字典

        result = sorted(word.items(),key = lambda x : x[1], reverse = True)

        return result

    count_str = input("Please input a string:\n")

    print(count_str_word(count_str))

    51Day Day up!

    向上向善,日进一步!

    每天学习,努力成长!

    定个小目标,开启成长的旅程,遇见更好的自己。

    这是我们和自己的约定,许诺自己不负韶华。

    路虽远,行则将至;事虽难,做则必成。

    成长的最好时机,就是当下。

    相关文章

      网友评论

          本文标题:Day049|Python300例之统计字符串各单词频次并排序输

          本文链接:https://www.haomeiwen.com/subject/utcgkltx.html