我和一位朋友正在研究一个项目,我们已经能够使用以下代码找到字典的所有首字母:
def findFirstLetter(aDict):
for i in aDict:
aDict[i]=i[0:2]
return(aDict)
我们正在尝试创建另一个这样的函数,而是在每个单词中找到其余的过渡并将它们放入一个新的字典中。
例如:
带一个单词{_steam_}
的字典
给我们{'st':'','te':'','ea':'','am':'','m_':''}
编辑:感谢您的快速回复,第一次来到网站,所以必须利用这里的事情。你们开始尝试不同的方式来做这个。该项目基于制作马尔可夫模型,如果有人好奇的话。
答案 0 :(得分:1)
你基本上是在找bigrams。这在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': ''}
答案 1 :(得分:0)
>>> 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
,则可以添加哨兵字符,如下所示:
>>> 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}
>>>