我需要帮助来检索字典的值。 字典:
{'m': '110', 'a': '0', 's': '111', 'y': '10'}
角色的概率:
[('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)]
问题是如何检索每个字符的长度并将其与每个字符的概率相乘,以获得字符的平均长度。例如:
a=1*0.5
y=2*0.16666666666666666
m=3*0.16666666666666666
s=3*0.16666666666666666
最终答案应该是:
average length of character: 1.83
谢谢。
答案 0 :(得分:1)
sum1=0
for prob in probs:
sum1+=len(d[prob[0]])*prob[1]
print("average length of character:",sum1)
平均字符长度:1.8333333333333333
答案 1 :(得分:1)
使用sum
和适当的generator expression来产生概率加权长度:
chars = {'m': '110', 'a': '0', 's': '111', 'y': '10'}
probs = [('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)]
avg_len = sum(p * len(chars[c]) for c, p in probs)
# ^^^^^^^^^^^^^^^^^ --- prob-weighted length of char c
# 1.8333333333333333
print('average length of character: {:.2f}'.format(avg_len))
答案 2 :(得分:1)
您可以将sum
与生成器表达式一起使用:
d = {'m': '110', 'a': '0', 's': '111', 'y': '10'}
p = [('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)]
print('average length of character: %.2f' % sum(len(d[k]) * v for k, v in p))
这将输出:
average length of character: 1.83
答案 3 :(得分:1)
使用Python 3,将是:
strings = {'m': '110', 'a': '0', 's': '111', 'y': '10'}
probabilities = dict ([('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)])
averageLength = 0
for key in strings:
averageLength += len (strings [key]) * probabilities [key]
print (averageLength)
注意:该程序使用一个简单的循环,如果您不熟悉Python,我认为它很容易理解。其他答案使用称为列表理解的东西。一旦您了解了这些功能,在很多情况下它们都是首选,尽管由于您无法单步调试它们而使调试起来有些困难。
答案 4 :(得分:1)
>>> d = {'m': '110', 'a': '0', 's': '111', 'y': '10'}
>>> a = dict([('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)])
>>> sum([len(d[key])*a[key] for key in d.keys()])
1.8333333333333333
这种简单的方法可能会帮助您获得答案
答案 5 :(得分:1)
您可以使用lambda
和内置的sum
函数:
d = {'m': '110', 'a': '0', 's': '111', 'y': '10'}
prob = [('m', 0.16666666666666666), ('a', 0.5), ('s', 0.16666666666666666), ('y', 0.16666666666666666)]
avg = sum(map(lambda p : (len(d[p[0]])*p[1]), prob))
This是有关如何在Python中使用lambda的非常不错的指南