Подсчет равных строк в Python - PullRequest
3 голосов
/ 03 декабря 2011

У меня есть список строк, и некоторые из них равны.Мне нужен скрипт, который бы считал равные строки.Пример:

У меня есть список с несколькими словами:

"Дом""Мечта"«Дерево»«Дерево»"Жилой дом""Небо""Жилой дом"

И вывод должен выглядеть так:

"Дом" - 3"Дерево" - 2"Мечта" - 1и так далее

Ответы [ 5 ]

7 голосов
/ 03 декабря 2011

Использовать collection.Counter () . Он предназначен именно для этого случая использования:

>>> import collections
>>> seq = ["House", "Dream", "Tree", "Tree", "House", "Sky", "House"]
>>> for word, cnt in collections.Counter(seq).most_common():
        print repr(word), '-', cnt

'House' - 3
'Tree' - 2
'Sky' - 1
'Dream' - 1
4 голосов
/ 03 декабря 2011

Решение

Это довольно просто (words - это список слов, которые вы хотите обработать):

result = {}
for word in set(words):
    result[word] = words.count(word)

Не требует никаких дополнительных модулей.

Тест

Для следующего значения words:

words = ['House', 'Dream', 'Tree', 'Tree', 'House', 'Sky', 'House']

он даст вам следующий результат:

>>> result
{'Dream': 1, 'House': 3, 'Sky': 1, 'Tree': 2}

Отвечает ли он на ваш вопрос?

3 голосов
/ 03 декабря 2011
from collections import defaultdict
counts = defaultdict(int)
for s in strings:
    counts[s] += 1
for (k, v) in counts.items():
    print '"%s" - %d' % (k, v)
2 голосов
/ 03 декабря 2011

Я расширю ответ Тадека, чтобы напечатать результаты.

for word in set(words):
  print '''"%s" - %d''' %(word, words.count(word))
1 голос
/ 03 декабря 2011

Ниже код должен получить вас, как ожидалось

stringvalues = ['House', 'Home', 'House', 'House', 'Home']
for str in stringvalues:
    if( str in newdict ):
        newdict[str] = newdict[str] + 1
    else:
        newdict[str] = 1
all = newdict.items()
for k,v in all:
    print "%s-%s" % (k,v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...