0

辞書にネストされたリストに追加しようとしているので、どの文字が文字の後に続くかを確認できます。一番下に希望の結果があります。なぜこれが一致しないのですか?

word = 'google'
word_map = {}

word_length = len(word)
last_letter = word_length - 1

for index, letter in enumerate(word):
    if index < last_letter:
        if letter not in word_map.keys():
            word_map[letter] = list(word[index+1])
        if letter in word_map.keys():
            word_map[letter].append(word[index+1])
    if index == last_letter:
        word_map[letter] = None

print word_map

desired_result = {'g':['o', 'l'], 'o':['o', 'g'], 'l':['e'],'e':None}
print desired_result
4

2 に答える 2

5

標準ライブラリを有利に使用します。

from itertools import izip_longest
from collections import defaultdict

s = 'google'

d = defaultdict(list)
for l1,l2 in izip_longest(s,s[1:],fillvalue=None):
    d[l1].append(l2)

print d

ここでの最初のトリックは、文字をペアで生成することです (None最後に a を付けます)。それがまさに私たちが行うことですizip_longest(s,s[1:],fillvalue=None)。そこから、最初の文字に対応する辞書リストに 2 番目の文字を追加するだけです。defaultdict を使用すると、キーが dict にあるかどうかを確認するためのあらゆる種類のテストを回避できます。

于 2013-03-05T14:44:12.323 に答える
1
if letter not in word_map.keys():
   word_map[letter] = list(word[index+1])

# now letter IS in word_map, so this also executes:
if letter in word_map.keys():
    word_map[letter].append(word[index+1])

あなたが意味したのは:

if letter not in word_map.keys():
   word_map[letter] = list(word[index+1])

else:
   word_map[letter].append(word[index+1])

もう 1 つ: 最後の文字が単語の途中にある場合はどうなるでしょうか。

于 2013-03-05T14:41:00.443 に答える