Создать словарь с твиттером хэштегом - PullRequest
0 голосов
/ 12 октября 2018

Я читаю в файле твитов, которые я скачал с общего диска:

lst = list()
with open('cwctweets.txt', 'r', encoding = 'utf8') as infile:
    txt = infile.readlines()

Превратил его в список из 10 словарей:

for line in txt:
    dct = dict(line)
    lst.append(dct)

В каждом словаре, как мне кажется, 15твиты, кроме первого, lst[0], который имеет 100.

Я пытаюсь создать словарь, в котором хэштегами являются ключи, а количество хэштегов - значениями.

Все словари (0-9) выглядят так:

lst[0].keys()
dict_keys(['search_metadata', 'statuses'])

И я сосредотачиваюсь только на «статусах»:

lst[0]['statuses'][1].keys()

dict_keys(['geo', 'entities', 'in_reply_to_user_id_str', 'favorite_count', 'retweeted', 'id', 'place', 'source', 'text', 'in_reply_to_user_id', 'favorited', 'id_str', 'lang', 'truncated', 'contributors', 'created_at', 'metadata', 'retweet_count', 'in_reply_to_status_id_str', 'coordinates', 'in_reply_to_screen_name', 'user', 'in_reply_to_status_id'])

Вот где я нахожуhashtags:

lst[0]['statuses'][1]['entities'].keys()

dict_keys(['user_mentions', 'hashtags', 'urls', 'symbols'])

Так что я могу сделать это, чтобы распечатать хэштеги:

for a in lst:
    for b in a['statuses']:
        print(b['entities']['hashtags'])

И мой вывод выглядит так:

[{'indices': [47, 56], 'text': 'WorldCup'}, 
{'indices': [57, 63], 'text': 'CWC15'}, {'indices': 
[64, 72], 'text': 'IndvsSA'}]
[{'indices': [107, 113], 'text': 'CWC15'}, 
{'indices': [114, 122], 'text': 'NZvsENG'}, 
{'indices': [123, 134], 'text': 'Contenders'}]
...

Но когда япопробуйте создать словарь с хэштегами в качестве ключей и хэштегами считаются значения:

dct1 = dict()
for a in lst:
    for b in a['statuses']:
        if b['entities']['hashtags'] not in dct1:
            dct1[b] = 1
        else: 
            dct1[b] += 1

Это ошибка, которую я получаю:

TypeError                                 Traceback (most recent call last)
<ipython-input-129-cc2e453c6f6d> in <module>()
      2 for a in lst:
      3     for b in a['statuses']:
----> 4         if b['entities']['hashtags'] not in dct1:
      5             dct1[b] = 1
      6         else:

TypeError: unhashable type: 'list'

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

1 Ответ

0 голосов
/ 12 октября 2018

Ошибка неисчисляемого типа появляется, когда для доступа к словарю используется тип, такой как тип list.Причина этого заключается в том, что списки не могут использоваться в качестве ключа для словаря.

Строка if b['entities']['hashtags'] not in dct1: проверяет, находится ли данный ключ в словаре.

Вывести значение b['entities']['hashtags'].если его окружают [ и ], это означает, что это список.

Из приведенного выше кода кажется, что ключ hashtags b['entities'] содержит список хэштегов.В соответствии с вашими потребностями вам, возможно, потребуется выбрать одно из значений в hashtags и использовать его для проверки каждого значения в другом словаре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...