开发者社区> 问答> 正文

如何从以相同字母开头和结尾的单词创建单词部分的字典

.我正在尝试编写一个脚本-read_dict(dictionary)-该脚本以.txt文件为参数,并给出文件中每个单词的单词部分的字典。这些部分是每个单词的第一个和最后一个字母,以及其余的字母。例如,如果文件如下:

===dictionary.txt===
quack  qk
quick qk
going gg
gathering gg
quirk qk
quicken qn

输出应为:

{'qk':{'uac','uic'},'gg':{'oin','atherin'},'qn':{'uicke'}}

我这样写:

def outside(word):
    a = word.strip()[0]
    b = word.strip()[-1]
    out_word = a + b
    return out_word


def inside(word):
    a = word.strip()[1:-1]
    return a


def read_dict(dictionary):
    a = {}
    with open(dictionary, 'r') as text:
        data = text.readlines()
        for i in data:
            a[outside(i)] = inside(i)
    return a

但是我的输出是:

{'qk':'uac','gg':'oin','qn':'uicke'}

它只保存第一个单词。我也找不到一种方法来收集集合中所有具有相同字母的内部(单词),然后使用适当的键(例如“ qk”)将它们添加到字典中。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-21 12:13:32 805 0
1 条回答
写回答
取消 提交回答
  • 正如@ Ch3steR所说,这可以通过collections.defaultdict轻松实现。修改您的代码为此:

    from collections import defaultdict
    
    def read_dict(dictionary):
        a = defaultdict(set)
        with open(dictionary, 'r') as text:
            data = text.readlines()
            for i in data:
                a[outside(i)].add(inside(i))
        return a
    

    如果您不想使用任何外部库,则可以执行以下操作:

    def read_dict(dictionary):
        a = {}
        with open(dictionary, 'r') as text:
            data = text.readlines()
            for i in data:
                key = outside(i)
                if key in a:
                    a[key].add(inside(i))
                else:
                    a[key] = {inside(i)}
        return a
    

    通过比较两个代码片段,您还可以了解collections.defaultdict的作用以及如何使您编写更少的代码。

    回答来源:stackoverflow

    2020-03-21 12:13:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载