Python 通过defaultdict从字符串创建键/值

Python 通过defaultdict从字符串创建键/值,python,dictionary,key,defaultdict,Python,Dictionary,Key,Defaultdict,我想使用字符串创建一个默认dict。假设我有“你好”这个词: 我希望函数返回: {'h':{'e'}, 'e':{'l'}, 'l':{'l', 'o'}} 我尝试先创建一个defaultdict(set)以消除所有重复项,但我不确定如何从字符串中的下一个字母中获取键的值(如果有意义的话?) 这会返回一个错误,说明str对象如何没有“add”属性。您的代码工作正常: >>> from collections import defaultdict >>> de

我想使用字符串创建一个默认dict。假设我有“你好”这个词: 我希望函数返回:

{'h':{'e'}, 'e':{'l'}, 'l':{'l', 'o'}}
我尝试先创建一个defaultdict(set)以消除所有重复项,但我不确定如何从字符串中的下一个字母中获取键的值(如果有意义的话?)


这会返回一个错误,说明str对象如何没有“add”属性。

您的代码工作正常:

>>> from collections import defaultdict
>>> def next(s):
...     x = defaultdict(set)
...     for i in range(len(s)-1):
...         x[i].add(s[i+1])
...     return x
... 
>>> next('hello')
defaultdict(<type 'set'>, {0: set(['e']), 1: set(['l']), 2: set(['l']), 3: set(['o'])})
这将产生所需的输出:

>>> def next(s):
...     x = defaultdict(set)
...     for i in range(len(s)-1):
...         x[s[i]].add(s[i+1])
...     return x
... 
>>> next('hello')
defaultdict(<type 'set'>, {'h': set(['e']), 'e': set(['l']), 'l': set(['l', 'o'])})

跟踪以前的值(向后看)要比向前看容易得多;毕竟,您已经传递了以前的值。

Omg谢谢!x[s[i]]为我提供了我想要的结果。这么小的错误!谢谢!:)
def next(s):
    x = defaultdict(set)
    for i in range(len(s)-1):
        x[s[i]].add(s[i+1])
    return x
>>> def next(s):
...     x = defaultdict(set)
...     for i in range(len(s)-1):
...         x[s[i]].add(s[i+1])
...     return x
... 
>>> next('hello')
defaultdict(<type 'set'>, {'h': set(['e']), 'e': set(['l']), 'l': set(['l', 'o'])})
def next_dict(s):
    x = defaultdict(set)
    prev = s[0]
    for char in s[1:]:
        x[prev].add(char)
        prev = char
    return x