从以前的单词词典创建一个包含所有字母转换的词典?

2024-10-01 13:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我和一个朋友正在做一个项目,我们已经找到了一本字典的所有第一个字母,代码如下:

def findFirstLetter(aDict):
    for i in aDict:
        aDict[i]=i[0:2]
    return(aDict)

我们正试着做另一个类似这样的函数,但不是在每个单词中找到其余的转换,并将它们放入一个新的字典中。你知道吗

例如:

带着{_steam_}这个词的字典 给我们{'st':'','te':'','ea':'','am':'','m_':''}

编辑:谢谢你的快速反应,第一次在网站上,所以要习惯这里的事情如何运行。开始尝试你们推荐的不同方法。如果有人好奇的话,这个项目是建立在马尔可夫模型的基础上的。你知道吗


Tags: 项目函数代码inforreturn字典def
2条回答

你基本上是在找大人物。这在Python中很简单:

def bigrams(token):
    return (token[i:i+2] for i in range(len(token)-1))

示例:

>>> dict((g, '') for g in bigrams("_steam_"))
{'_s': '', 'te': '', 'ea': '', 'm_': '', 'st': '', 'am': ''}
>>> word = 'steam'
>>> for i in range(len(word)):
...     print word[i:i+2]
... 
st
te
ea
am
m

假设你想数一数,以防一对字母出现不止一次。你知道吗

>>> pairs = {}
>>> n = 2
>>> word = 'banana'
>>> for i in range(len(word)):
...     pair = word[i:i+n]
...     pairs[pair] = pairs.get(pair, 0) + 1
... 
>>> pairs
{'a': 1, 'na': 2, 'ba': 1, 'an': 2}
>>> 

如果希望pairs中的所有键的长度相同,n,可以附加一个sentinel字符,如下所示:

>>> pairs = {}
>>> for i in range(len(word)):
...     pair = word[i:i+n]
...     pair += '$' * (n - len(pair))
...     pairs[pair] = pairs.get(pair, 0) + 1
... 
>>> pairs
{'na': 2, 'a$': 1, 'ba': 1, 'an': 2}
>>> 

相关问题 更多 >