Получить среднюю длину символа словаря в питоне - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужна помощь, чтобы получить значение словаря.Словарь:

{'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 голосов
/ 12 сентября 2018

Вы можете использовать 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))

Это очень хорошее руководство о том, как использовать лямбду в Python

0 голосов
/ 12 сентября 2018
>>> 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

Этот простой подход может помочь вам получить ваш ответ

0 голосов
/ 12 сентября 2018

При использовании 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.Другие ответы используют то, что называется списком.Как только вы поймете, что они делают, они во многих случаях предпочтительнее, хотя их немного сложнее отладить, поскольку вы не можете пройти через них один шаг.

0 голосов
/ 12 сентября 2018

Вы можете использовать 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
0 голосов
/ 12 сентября 2018

Использование sum с соответствующим выражением генератора , создающим длины, взвешенные по вероятности:

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))
0 голосов
/ 12 сентября 2018
sum1=0
for prob in probs:
    sum1+=len(d[prob[0]])*prob[1]
print("average length of character:",sum1)

Вывод

средняя длина символа: 1.8333333333333333

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...