0

そのため、文字列を受け取り、文字列内のすべての文字を並べ替えたタプルを返すプログラムがあります。

次に、プログラムはタプルをキーとして辞書を作成する必要があり、値はキーを持つすべての単語のリストです

これまでのところ、私は持っています:

_DEBUG = True
def getLetters(string):
    """Purpose, to nab letters from a string and to put them in a tuple in
    sorted order."""
    #sort the letters and put them in a tuple
    tuple_o_letters = tuple(sorted(string))
    if _DEBUG:

    print tuple_o_letters
    return tuple_o_letters
def main():
    try:# open the file
        fin = open("words2.txt")
    except:
        #if file doesn't exist
        print("no, no, file no here.")
        sys.exit(0)
    wordList = [] #create a word list
    for eachline in fin:
        #fill up the word list and get rid of new lines
        wordList.append(eachline.strip())

    word_dict = {} # create a dictionary
    for eachWord in wordList:
        tuple = getLetters(eachWord) # make a tuple out of each word
        word_dict[tuple] = wordList #store it into a dictionary

    print word_dict #print out the dictionary


if __name__ == '__main__':
    main()

さて、タプルを辞書のキーとして保存することはできますが、単語リストにそれらのキーがある場合にのみ、単語リストを値として保存する方法がわかりません。

例: 辞書の if にキー ('d', 'o', 'g') がある場合、その特定のエントリに対して値 god と dog を取得します。これらの 2 つの単語が単語リストにあると仮定します ( words2.txt ファイルから取得しました。

4

1 に答える 1

0

単語リスト全体を保存しています。ソートされた文字のタプルごとに一致する単語だけを保存したいとします。

word_dict = {} # create a dictionary

for eachWord in wordList:
    key = getLetters(eachWord) # make a tuple out of each word
    if key in word_dict:
        word_dict[key].append(eachWord)
    else:
        word_dict[key] = [eachWord]

これは、キーがまだそこにない場合は指定されたキー (文字タプル) のリストを作成し、それ以外の場合は単に単語を追加します。

を使用してこれを簡素化できますcollections.defaultdict

from collections import defaultdict

word_dict = defaultdict(list)

for eachWord in wordList:
    word_dict[getLetters(eachWord)].append(eachWord)

毎回明示的にキーをテストする必要がないからです。

于 2013-03-25T17:56:21.113 に答える