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)。从那里,只需将第二个字母附加到与第一个字符对应的字典列表中即可。defaultdict 允许我们避免各种测试来检查键是否在字典中。

于 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])

另一件事:如果最后一个字母也出现在单词的中间怎么办?

于 2013-03-05T14:41:00.443 回答