Программа, которую я пытаюсь создать, должна взять файл (фиктивный файл, например, stream.txt):
andrew I hate mondays.
fred Python is cool.
fred Ko Ko Bop Ko Ko Bop Ko Ko Bop for ever
andrew @fred no it isn't, what do you think @john???
judy @fred enough with the k-pop
judy RT @fred Python is cool.
andrew RT @judy @fred enough with the k pop
george RT @fred Python is cool.
andrew DM @john Oops
john DM @andrew Who are you go away! Do you know him, @judy?
и распечатать топ n пользователей.с самыми ретвитнутыми твитами.Первое слово в данной строке - это пользователь, а все остальное - это содержимое сообщения, где «RT» обозначает ретвит, а «DM» обозначает прямое сообщение.
Программа должна напечатать пользователя сбольшинство ретвитов ( не пользователь, который ретвитает больше всего ) рядом с количеством ретвитов, которые накопил пользователь.
n должно основываться на количестве пользователей, что означает, что если естьпри этом будет напечатано меньше n строк, так как будет два пользователя с одинаковым числовым значением.Решение для фиктивных данных, приведенных выше, будет следующим:
Enter n: 10
2 fred
1 judy
Код, который у меня сейчас есть:
#define libraries used, counter, dictionary, and file path
from collections import Counter, defaultdict
from pathlib import Path
def main():
#define n as user input, can only be an integer
n = input('Enter n: ')
try:
n = int(n)
except:
print('Invalid input.')
return
#Open file from path, read line by line and remove whitespace characters
ss = Path('stream.txt').read_text().strip().split('\n')
#Count tweets and add to dictionary, strip spaces and tabs, separate tweets from retweets
c = Counter([
i.strip().split(' ', 1)[0] for i in ss
if i.strip().split(' ', 2)[1] in ('RT @ ')
])
d = defaultdict(list)
#Formatting
for k, v in c.most_common():
d[v].append(k)
print('\n'.join([f'{k} {" ".join(v)}' for k, v in list(d.items())[:n]]))
#runs main
if __name__ == '__main__':
main()
Однако это дает вывод:
Enter n: 10
1 judy andrew george
Я новичок в Python и не знаю, как продвинуться с этого момента.Любая помощь будет принята с благодарностью.