2015-10-14 3 views
1

У меня есть большой список строк, и я бы хотел создать словарь из этого.Regex: создание словаря из списка строк

Каждое другое слово является ключом, а значение представляет собой количество раз, когда слово присутствует во всем списке различных строк.

Я новичок в Python все еще и немного потерян. Я уверен, что я должен сделать петлю, в которой я должен был бы:

  1. Проверьте, если следующее слово не является дубликатом
  2. поддерживать итератор, чтобы вычислить количество раз каждое слово существует в словаре

Что делать, если я сначала использую set(), чтобы получить все уникальные слова, а затем прокрутить их и подсчитать частоту?

Было бы очень признательна любой совет

[u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'retw', u'chr1sa', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'retw', u'shakycode', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'an', u'interesting', u'read', u'manhattan', u'is', u'the', u'best', u'tv', u'show', u'that', u'hardly', u'anybody', u'is', u'watching', u'http', u':', u'//t.co/psfmauuwfg'] [u'tmr', u'am', u':', u'lunch', u'at', u'the', u'arts', u'!', u'from', u'11-2pm', u'at', u'1935', u'manhattan', u'beach', u'blvd', u'in', u'redondo', u'beach', u'!', u'map', u':', u'http', u':', u'//t.co/x6x2eeijbh'] [u's1', u'was', u'superb', u'.', u'``', u'manhattan', u'is', u'the', u'best', u'tv', u'show', u'that', u'hardly', u'anybody', u'is', u'watching', u"''", u'http', u':', u'//t.co/q6iazmtaam'] [u'taylor', u'swift', u'seen', u'leaving', u'msr', u'studios', u'in', u'manhattan', u'on', u'october', u'07', u',', u'2015', u'in', u'new', u'york', u',', u'new', u'york', u'.', u'http', u':', u'//t.co/3cwxrapr38'] [u'viva', u'a1054665', u'manhattan', u'acc', u'estimated', u'to', u'be', u'7', u'yrs', u'old', u'american', u'staff', u'mix', u',', u'white', u'/', u'brown', u',', u'spayed', u'female', u'...', u'http', u':', u'//t.co/sloopljyxq'] [u'#', u'3d', u'taevision', u"'showroom", u'in', u'the', u'night', u'#', u'porsche', u'996', u"'", u'#', u'automotive', u'#', u'fashion', u'#', u'makeup', u'#', u'ny', u'#', u'nyc', u'#', u'manhattan', u'http', u':', u'//t.co/eftvytqedk'] 

Спасибо

+1

проверить https://docs.python.org/2/library/collections.html#collections.Counter –

+0

можете ли вы поместить каждый список в отдельную строку, чтобы он был более читабельным. Вы можете использовать [Счетчик] (https://docs.python.org/2/library/collections.html#collections.Counter) – kmad1729

ответ

4

Для Python 2.7 и выше использования Counter от collectionsmodule:

from collections import Counter 
mylist = [u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc', u'retw', u'chr1sa', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc', u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of'] 
c = Counter(mylist) 
print dict(c) 
[(u':', 8), 
(u'rt', 3), 
(u'uber', 3), 
(u'newsycombinator', 3), 
(u'of', 3), 
(u'is', 3), 
(u'retw', 3), 
(u'taking', 3), 
(u'millions', 3), 
(u'from', 2), 
(u'//t.co/zluyq3f6cc', 2), 
(u'manhattan', 2), 
(u'away', 2), 
(u'http', 2), 
(u'taxis', 2), 
(u'rides', 2), 
(u'olutosinfashusi', 1), 
(u'chr1sa', 1), 
(u'folivi_jochan', 1)] 

Если у вас есть три отдельные списки попробовать с использованием chain от itertools:

one,two,three = [u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'],[u'retw', u'chr1sa', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'], [u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of'] 
from itertools import chain 
from collections import Counter 
c=Counter(chain(one,two,three)) 

Counter - класс высокой производительности для подсчета элементов элементов в итерациях. Его метод most_common() возвращает список tuple s (element,count). Этот список кортежей может быть использован для построения dict

+0

Это даст мне самый общий элемент. Мне нужен полный словарь, где Key = уникальное слово из списка строк, Value = частота слова в списке строк – Toly

+0

Удивительный! Для некоторого переустройства в том же наборе я получаю: {'!': 2, '': 209, '#': 8, '"': 6," '": 418,' - ': 1 Не вижу ошибка, которая, я уверен, что я где-то сделал. Это такое БОЛЬШОЕ решение! Спасибо! – Toly

+0

Хороший ответ. Но в чем смысл 'most_common()'? 'Counter' уже является подклассом' dict'. необходимо преобразовать в 'dict' вообще, и если вы хотите, вы можете сделать это напрямую:' d = dict (c) '. – FMc

0

Альтернативный подход, используя свой for цикл:

for word in strings: 
if word not in dict.keys(): 
    dict[word]=1 
else: 
    dict[word] += 1 

Выше предполагает, что string ваш список слов, которые вы хотите итерацию.

+0

Нет необходимости в '.keys()'. Просто проверьте на членство непосредственно против dict. – FMc

Смежные вопросы