繁体   English   中英

Python:在字符串中获取以下字母,并将其用作字典中的键值

[英]Python: Get the following letters in a string and use as key value in dictionary

比方说,例如,我有一个字符串“ attempt”,我想将其分解为字典,以将字母作为键存储,并将以下字母作为值存储在列表中。 因此,我通过一个函数传递了包含“ attatt”的字符串,并使该函数返回一个字典,该字典看起来像

{'a': ['t'], 'm': ['p'], 'e': ['m'], 't': ['t', 'e'], 'p': ['t']}

我能得到的最远的东西是

def convert(something):
    dictionary = {}
    for j in range(len(something)):
        if something[j] not in dictionary.keys():
            if i+1 < len(s):
                dictionary[something[j]] = something[j+1]
    return dictionary

但这几乎无法接近,因为输出开始看起来像

{'a':'t','t':'t','m':'p','e':'m','p':'t'}

我将如何从概念上进行这项工作?

*这是在python 3

Defaultdict将很好地满足您的目的:

from collections import defaultdict
looknext = defaultdict(list)
s="attempt"
for index, char in enumerate(s[:-1]):
    looknext[char].append(s[index+1])
looknext  # looks like: defaultdict(<type 'list'>, {'a': ['t'], 'm': ['p'], 'e': ['m'], 't': ['t', 'e'], 'p': ['t']})

它是如何工作的(按注释中的要求): defaultdict将为您创建一个字典,当您访问其项/值之一时,例如looknext[char]会自动使用list初始化该值(或传递给任何default_factory值) (其构造函数),如果尚未访问该值。 它在功能上等同于:

try:
    looknext[char].append(s[index+1])
except KeyError:
    looknext[char] = [s[index+1]]

这是一种解决方案:

string = 'attempt'

dic = dict([(letter,[]) for letter in string[:-1]])

这给了我们

>>> dic
{'a': [], 'm': [], 'e': [], 't': [], 'p': []}

这利用了字典定义将覆盖重复键的事实,因此每个字母只能在其中一次。 现在您有一堆空列表,然后在其中填充适当的内容...

for i in range(len(string)-1):
    dic[string[i]].append(string[i+1])

...通过追加(不管列表中是否已有内容)。 这也将保持列表中字母的顺序不变。

可能存在一个更优雅的解决方案,该解决方案仅使用一个循环,或者至少也使用隐式表示法替换第二个循环-但这应该做到。

注意 :我在Python 2.7中对此进行了测试,但afaik在3.x中应该可以完全相同地工作

word = 'attempt'
d = {c: [] for c in word}
for current, next in zip(word, word[1:]):
    d[current].append(next)
# -> {'a': ['t'], 'e': ['m'], 'm': ['p'], 'p': ['t'], 't': ['t', 'e']}

注意:单词中的最后一个字符也在字典中,即使其列表通常可能为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM