0

我读到了从共享驱动器下载的推文文件:

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'])

这是我找到主题标签的地方:

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'

现在我不确定如果我可以以类似的方式打印出主题标签,为什么它不起作用,请帮忙?

4

1 回答 1

0

当使用诸如类型之类的list类型访问字典时,会出现不可散列的类型错误。原因是列表不能用作字典的键。

该行if b['entities']['hashtags'] not in dct1:检查给定键是否不在字典中。

打印 的值b['entities']['hashtags']。如果它有[]围绕它,则表示它是一个列表。

从您上面的代码中,似乎hashtagskeyb['entities']包含一个主题标签列表。根据您的需要,您可能需要选择其中一个值hashtags并使用它来检查其他字典中的每个值。

于 2018-10-12T04:59:36.577 回答