Как написать программу, которая анализирует строки, идентифицирует хэштеги, подсчитывает их и добавляет в словарь?

#python #list #dictionary

Вопрос:

пример ввода

 [
    "hi #weekend",
    "good morning #madrid #fun",
    "spend my #weekend in #madrid",
    "#madrid <3"
]
 

ожидаемый результат

 {'weekend': 2, 'madrid': 3, 'fun': 1}

 

Правила:

  • программа не должна рассматривать пустой хэштег («#») как один
  • хэштеги, не начинающиеся с буквы, не должны считаться хэштегами
  • он должен рассматривать хэштеги в нижнем и верхнем регистре как разные хэштеги

Это то, что у меня есть до сих пор. Моя цель — включить правила в программу

 from collections import Counter

def analyze(posts):
    counter = Counter(
        x[1:] for x in ' '.join(posts).split() if x.startswith('#')
    )
    return dict(counter)


posts = [
    "hi #weekend",
    "good morning #madrid #fun",
    "spend my #weekend in #madrid",
    "#madrid <3"]

print(analyze(posts))
 

Ответ №1:

Учитывая условие, что хэштег должен начинаться с буквы, я предлагаю использовать регулярное выражение для извлечения всех хэштегов, начинающихся с буквы:

 import re
from collections import Counter

def analyze(posts):
    hits = re.findall('#[A-Za-z] [A-Za-z0-9]*', ' '.join(data))
    return Counter([i[1:] for i in hits])
 

Ответ №2:

Попробуйте это:

 a = [
    "hi #weekend",
    "good morning #madrid #fun",
    "spend my #weekend in #madrid",
    "#madrid <3"
]

my_dict = {}

for j in a:
    for i in j.split():
        if i.startswith("#") and i[1].isalpha():
            if i[1:] in my_dict:
                my_dict[i[1:]]  = 1
            else:
                my_dict[i[1:]] = 1
print(my_dict)
 

Вывод:

 {'weekend': 2, 'madrid': 3, 'fun': 1}
 

Ответ №3:

Вы можете использовать collections.Counter и простое понимание:

 l = [
    "hi #weekend",
    "good morning #madrid #fun",
    "spend my #weekend in #madrid",
    "#madrid <3"
]

from collections import Counter
counts = Counter(w[1:] for w in ' '.join(l).split()
                 if len(w)>1 and w.startswith('#') and w[1].isalpha())
 

вывод:

 >>> counts
Counter({'weekend': 2, 'madrid': 3, 'fun': 1})

# as dictionary
>>> dict(counts)
{'weekend': 2, 'madrid': 3, 'fun': 1}
 

Комментарии:

1. Это будет включать хэштеги, начинающиеся с числа…

2. @RJAdriaansen Я только что увидел условие и предоставил обновление 😉