1

私がやろうとしているのは、テキスト ファイルを取得し、ファイル内のアナグラム (アルファベット順に並べ替えると新しい単語を作成する単語) の辞書を返すことです。したがって、ファイルに dub と bud という単語が含まれている場合、コードはキー bdu を作成し、文字列 dub と bud をタプルまたはリストなどでそれらにアタッチする必要があります。

今私のコードは、複数の値を持つ1つのキーの代わりに、すべての値に対して同一のキーを取得することを除いて、私が望むものを正確に出力します。前の例に戻ると、dub のキー bdu を取得してから、bud の別の bdu キーを取得します。同一のキーを削除し、キー値を 1 つのキーにマージするにはどうすればよいですか?

def anagrams(f):
    '''takes a file and returns a list of anagrams in the file'''
    wordget = open(f).read().lower().split()
    dic = {}
    for w in wordget:
        if ("".join(sortword(w))) in wordget:
            dic = {("".join(sortword(w))):w}
            for key in dic.keys():
                print "'%s': %s" % (key, dic[key])
    return None

どんな助けでも大歓迎です。何万もの単語を含むファイル(本のようなもの)でも、すばやく実行できるソリューションを考え出すことを望んでいます

4

2 に答える 2

1

collections パッケージにあるPython のdefaultdict型は、このような場合に役立ちます。

from collections import defaultdict
from pprint import pprint
answer = defaultdict(list)
for word in open(filename).read().lower().split():
    answer[''.join(sorted(word))].append(word)
pprint(answer)

defaultdict 初期化は、オブジェクトを初期化する関数を受け入れます。この場合、すぐに追加できる空のリストを初期化します。

pprintモジュールも便利です。単語のリストを適切にフォーマットします。

于 2013-10-16T04:11:43.577 に答える