将字典中的值相乘(如果字典存在于lis中)

2024-09-26 22:42:09 发布

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

我正在计算一些句子的概率。你知道吗

我有一本字典,里面有一些不同字母的值:

{'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}

然后我会在一个列表中列出单独的句子,例如:

['aabc', 'abbcc', 'cba', 'abcd', 'adeb']

我要做的是一些概率计算,这样它就可以在一个列表中搜索这个句子,然后乘以这些值 aabc应该是0.2777*0.2777*0.3333*0.388888

如何在这个列表中搜索每个独立的字符串并进行乘法?你知道吗


Tags: 字符串列表字典字母概率句子abcd我会
3条回答

你可以用双for循环。外部的for可以遍历句子列表,内部的for可以遍历句子中的每个字母。Python for循环语法是for item in iterable_object: <code to run>。试着使用这些信息,看看你能走多远。你知道吗

这是一种非常不新奇的方式:

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)

编辑:

如果要使用check检查字典是否有值,可以执行以下操作并使用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)

您可以使用^{}将句子缩减为其最终概率(请注意,如果字符没有概率,我只使用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]

相关问题 更多 >

    热门问题