2015-12-17 10 views
1

У меня есть два списка string:распределения вероятностей двух списков слов

(Pdb) word_list1 
['first', 'sentence', 'ant', 'first', 'whatever'] 
(Pdb) word_list2 
['second', 'second', 'heck', 'anything', 'youtube', 'gmail', 'hotmail'] 

Я хочу, чтобы вычислить распределение вероятности объединения слов для каждого из двух наборов для каждого слова.

(Pdb) print list(set(word_list1) | set(word_list2)) 
['hotmail', 'anything', 'sentence', 'maybe', 'youtube', 'whatever', 'ant', 'second', 'heck', 'gmail', 'first'] 
(Pdb) len(list(set(word_list1) | set(word_list2))) 
11 

Итак, я хочу два вектора длиной 11, по одному для каждого списка слов.

+0

Что вы ожидаемый результат? – ZdaR

+0

Я не знаю точно, что вы имеете в виду с «распределением вероятностей», но я думаю, что это своего рода дубликат для [how-can-i-count-the-entries-of-a-list-item-in-python] (http://stackoverflow.com/questions/2600191/how-can-i-count-the-occurrences-of-a-list-item-in-python) – MarkusN

+0

помогите? –

ответ

1

Вам нужно больше словаря с 11 элементов, как результат, и пойти на Counter вместо set операций, если вы ищете частоты:

from collections import Counter 

n = len(l1) + len(l2) 
dic = dict(Counter(l1) + Counter(l2)) 

# for the first list 
{k:round(v/n,2) if k in l1 else 0 for k,v in dic.iteritems()} 

#{'ant': 0.09, 
# 'anything': 0, 
# 'first': 0.18, 
# 'gmail': 0, 
# 'heck': 0, 
# 'hotmail': 0, 
# 'second': 0, 
# 'sentence': 0.09, 
# 'whatever': 0.09, 
# 'youtube': 0} 
Смежные вопросы