将字典中的值相乘(如果它存在于列表中)
Multiplying values from a dictionary if it exists in a list
我正在尝试计算一些句子概率。
我有一本字典,其中包含一些不同字母的值:
{'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
然后我在列表中有单独的句子,例如:
['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
我想做的是一些概率计算,以便它搜索列表中的句子并将值相乘,例如
aabc
将是 0.2777*0.2777*0.3333*0.388888
我如何在这个列表中搜索每个独立的字符串并进行乘法运算?
这是一种非常简单的方法:
values = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889, 'd':0.1234, 'e':0.5678}
strings = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
for string in strings:
product = 1
for char in string:
product *= values[char]
print(product)
编辑:
如果我们想使用检查字典是否有值,我们可以执行以下操作并使用 unk
代替:
values = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
strings = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
unk = 0.05
for string in strings:
product = 1
for char in string:
if char in values:
product *= values[char]
else:
product *= unk
print(product)
您可以使用双 for 循环。外层 for
会遍历句子列表,而内层 for
会遍历句子中的每个字母。 Python for 循环语法是 for item in iterable_object: <code to run>
。尝试使用此信息,看看您能走多远。
你可以用reduce
把你的句子归约成它最终的概率(注意如果一个字符没有概率,我就用1乘):
from functools import reduce
probs = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
sentences = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
result = [reduce(lambda acc, curr: probs.get(curr, 1) * acc, s, 1) for s in sentences]
print(result)
# [0.010002286236854138, 0.004667733577198597, 0.0360082304526749, 0.03600823045267489, 0.09259259259259259]
您可以使用列表理解和 for 循环来执行此操作。
def prob(string, prob):
out = 1;
probs = [prob[char] for char in string]
for x in probs:
out *= x;
return out
prob
是概率字典,string
是字符串。 in
遍历字符串中的每个字符。
我正在尝试计算一些句子概率。
我有一本字典,其中包含一些不同字母的值:
{'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
然后我在列表中有单独的句子,例如:
['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
我想做的是一些概率计算,以便它搜索列表中的句子并将值相乘,例如
aabc
将是 0.2777*0.2777*0.3333*0.388888
我如何在这个列表中搜索每个独立的字符串并进行乘法运算?
这是一种非常简单的方法:
values = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889, 'd':0.1234, 'e':0.5678}
strings = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
for string in strings:
product = 1
for char in string:
product *= values[char]
print(product)
编辑:
如果我们想使用检查字典是否有值,我们可以执行以下操作并使用 unk
代替:
values = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
strings = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
unk = 0.05
for string in strings:
product = 1
for char in string:
if char in values:
product *= values[char]
else:
product *= unk
print(product)
您可以使用双 for 循环。外层 for
会遍历句子列表,而内层 for
会遍历句子中的每个字母。 Python for 循环语法是 for item in iterable_object: <code to run>
。尝试使用此信息,看看您能走多远。
你可以用reduce
把你的句子归约成它最终的概率(注意如果一个字符没有概率,我就用1乘):
from functools import reduce
probs = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
sentences = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
result = [reduce(lambda acc, curr: probs.get(curr, 1) * acc, s, 1) for s in sentences]
print(result)
# [0.010002286236854138, 0.004667733577198597, 0.0360082304526749, 0.03600823045267489, 0.09259259259259259]
您可以使用列表理解和 for 循环来执行此操作。
def prob(string, prob):
out = 1;
probs = [prob[char] for char in string]
for x in probs:
out *= x;
return out
prob
是概率字典,string
是字符串。 in
遍历字符串中的每个字符。