Справочная информация: я хочу получать только уникальные твиты. Согласно комментариям к stackoverflow, один из способов сделать это - создать набор

Однако, когда я пробую следующий код, я получаю ошибку TypeError: Unhashable. Я нашел здесь некоторую информацию TypeError: Unhashable type. Я также знаю, что могу удалить дубликаты в MongoDB, где я храню, но будет чище, если я сделаю это перед сохранением.

Вопрос : можно ли собирать только уникальные твиты?

results = []
pages = 2 
counts = 100

while True:        
    for tweet in tweepy.Cursor(api.search, q = keywords, since="2017-07-21", until="2017-07-27", count = counts, lang = language,monitor_rate_limit=True, wait_on_rate_limit=True).pages(pages):
        results.extend(tweet)


    results = set(results)
0
SFC 27 Июл 2017 в 23:24
Сложно сказать без наглядного примера, но вы пытаетесь хешировать список, что недопустимо. Вместо этого вы должны попытаться поместить каждого члена списка в набор a = set() for tweet in results: a.add(tweet)
 – 
Srini
27 Июл 2017 в 23:43
Я пробовал код a = set() for tweet in results: a.add(tweet), но получаю сообщение об ошибке: недопустимый синтаксис
 – 
SFC
27 Июл 2017 в 23:55
Если бы вы вставили строку напрямую, вы наверняка получили бы синтаксическую ошибку, вы пробовали ее на отдельных строках с правильным отступом? Также: укажите ошибки, с которыми вы сталкиваетесь при отладке, чтобы помочь нам лучше решить вашу проблему.
 – 
Srini
28 Июл 2017 в 00:27

1 ответ

Лучший ответ

Без конкретного примера сложно сказать наверняка

{ ~ }  » python                                                                                                                            
>>> results = ["hi", "hello", "hi", "goodbye"]
>>> a = set()
>>> for tweet in results:
...     a.add(tweet)
...
>>> print a
set(['hi', 'hello', 'goodbye'])
>>>

Как вы можете видеть выше, в наборе только 1 «привет», вам не следует пытаться хешировать весь список в целом.

Хорошо, в соответствии с вашими комментариями, я провел небольшую обратную разработку, я определил, что в твитах есть текстовое поле, которое вам нужно добавить в набор,

Так что просто замените a.add(tweet) на a.add(tweet.text)

0
Srini 28 Июл 2017 в 02:03
Спасибо за предложение. Я пробовал код вашего примера с правильным синтаксисом и отступами. Однако я все равно получаю следующую ошибку, используя код tweepy.Cursor, который я предоставил выше. TypeError: unhashable type: 'Status'
 – 
SFC
28 Июл 2017 в 01:14