检索python中字典字符的平均长度

时间:2018-09-12 07:34:28

标签: python dictionary

我需要帮助来检索字典的值。 字典:

{'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

谢谢。

6 个答案:

答案 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的非常不错的指南