Python单词分类

题目内容:某些英语单词的字母经过重新排列后,能获得另外一个单词,如可以将“cinema”转换成另一个单词“iceman”。编写程序,将词表中由相同字母组成的单词聚成一类,并按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到小输出各个类别。
输入格式:按字典序由小到大输入若干个单词,每个单词占一行。
输出格式:按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到小输出各个类别。

思路

  1. 将单词拆成以字母为元素的元组作为字典的键(key),将单词作为字典的值(value),从而实现分类
  2. 字典的值要根据字典序由小到大排列
  3. 字典排列:先根据值的第一个单词字典序由大到小排列,再根据值的元素个数由大到小排列。
def get_words():
    words = []
    while True:
        s = input()
        if s != '':
            words.append(s)
        else:
            break
    return words
#输入:以列表储存


def get_dic(words):
    dic = {}
    for word in words:
        x = tuple(sorted(word))  #只有元组可以用hash形式储存
        if x in dic:
            dic[x].append(word)
        else:
            dic[x] = [word]
    return dic
#构造字典


d = get_dic(get_words())
for w in d.values():
    w.sort()
#值根据字典序由小到大排列
d = sorted(d.items(), key=lambda x: x[1][0], reverse=True)
#根据值的第一个单词字典序由大到小排列
d = sorted(d, key=lambda x: len(x[1]), reverse=True)
#根据值的元素个数由大到小排列
for a, b in d:
    print(" ".join(b))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容