#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 Я только что увидел условие и предоставил обновление 😉