附加到嵌套在Dictionary中的列表

时间:2013-03-05 14:37:26

标签: python list dictionary nested nested-lists

我试图追加嵌套在字典中的列表,这样我就可以看到哪些字母跟随一个字母。我想在底部获得理想的结果。为什么这不匹配?

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

2 个答案:

答案 0 :(得分: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)。这正是我们对izip_longest(s,s[1:],fillvalue=None)所做的。从那里,将第二个字母附加到对应于第一个字符的字典列表是一件简单的事情。 defaultdict允许我们避免各种测试来检查密钥是否在dict中。

答案 1 :(得分: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])

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