Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果值是字符串列表,如何引用字典中的值?_Python_Pandas_Dictionary_For Loop_Twitter - Fatal编程技术网

Python 如果值是字符串列表,如何引用字典中的值?

Python 如果值是字符串列表,如何引用字典中的值?,python,pandas,dictionary,for-loop,twitter,Python,Pandas,Dictionary,For Loop,Twitter,我从推特上收集数据,每条推特都是以字典的形式发布的 我的完整数据集是数千条推文的列表(字典列表) 我想引用每条推文中的标签,但我需要帮助了解如何做到这一点。 下面是一个包含两条部分推文和相关数据的列表示例: twitter_tweets = [{'created_at': 'Wed Oct 18 22:20:30 +0000 2017', 'id': 920776631102214144, 'entities': {'hashtags': ['#dataanalyst#', '#politi

我从推特上收集数据,每条推特都是以字典的形式发布的

我的完整数据集是数千条推文的列表(字典列表)

我想引用每条推文中的标签,但我需要帮助了解如何做到这一点。

下面是一个包含两条部分推文和相关数据的列表示例:

twitter_tweets =  
[{'created_at': 'Wed Oct 18 22:20:30 +0000 2017', 'id': 920776631102214144, 'entities': {'hashtags': ['#dataanalyst#', '#politics']} 'user': {'id': 119116331, 'statuses_count': 32796, 'verified': False, 'lang': 'en-'}, 'retweet_count': 0, 'favorite_count': 0}
{'created_at': 'Wed Oct 17 12:20:36 +0000 2017', 'id': 920776631106514144, 'entities': {'hashtags': ['#california', '#nationalparks']}  'user': {'id': 119159331, 'statuses_count': 32796, 'verified': False, 'lang': 'en-gb'}, 'retweet_count': 1, 'favorite_count': 2}]
请注意,“entities”键的值是第二个字典。在第二个字典中,“hashtags”是键,值是hashtags的列表

下面是我试图收集所有这些hashtag列表以创建频率序列的代码:

def make_tweets_series(input_list, first_key, second_key):
    final_keys_list = []
    for line in input_list:
        tweets_by_key = line[first_key][second_key]
        final_keys_list.append(tweets_by_key)
        series_key_values = pd.Series(final_keys_list).value_counts()

    return series_key_values


hashtag_distribution_series = make_tweets_series(twitter_tweets, 'entities', 'hashtags')
我认为,如果“hashtags”值是一个字符串,那么这段代码可以工作,但它不工作,因为“hashtags”是一个字符串列表

如何引用这些列表中的每个hashtag并将它们放入一个系列中

我的完整错误消息以及回溯如下:

Traceback (most recent call last):

  File "<ipython-input-60-7623feb35c84>", line 13, in <module>
    hashtag_distribution_series = make_tweets_series(twitter_tweets, 'entities', 'hashtags')

  File "<ipython-input-60-7623feb35c84>", line 6, in make_tweets_series
    series_key_values = pd.Series(final_keys_list).value_counts()

  File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/base.py", line 938, in value_counts
    normalize=normalize, bins=bins, dropna=dropna)

  File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/algorithms.py", line 640, in value_counts
    keys, counts = _value_counts_arraylike(values, dropna)

  File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/algorithms.py", line 685, in _value_counts_arraylike
    keys, counts = f(values, dropna)

  File "pandas/_libs/hashtable_func_helper.pxi", line 356, in pandas._libs.hashtable.value_count_object (pandas/_libs/hashtable.c:29440)

  File "pandas/_libs/hashtable_func_helper.pxi", line 367, in pandas._libs.hashtable.value_count_object (pandas/_libs/hashtable.c:29189)

TypeError: unhashable type: 'list'
回溯(最近一次呼叫最后一次):
文件“”,第13行,在
hashtag_distribution_series=make_tweets_series(twitter_tweets,‘实体’、‘hashtags’)
文件“”,第6行,在make_tweets_系列中
系列密钥值=pd.series(最终密钥列表)。值计数()
文件“/home/tommy/anaconda3/lib/python3.6/site packages/pandas/core/base.py”,第938行,以值为单位
正常化=正常化,存储箱=存储箱,dropna=dropna)
文件“/home/tommy/anaconda3/lib/python3.6/site packages/pandas/core/algorithms.py”,第640行,以值为单位
键,计数=\u值\u计数\u数组类(值,dropna)
文件“/home/tommy/anaconda3/lib/python3.6/site packages/pandas/core/algorithms.py”,第685行,类似于数组
键,计数=f(值,dropna)
文件“pandas/_libs/hashtable\u func\u helper.pxi”,第356行,在pandas.\u libs.hashtable.value\u count\u对象中(pandas/_libs/hashtable.c:29440)
文件“pandas/_libs/hashtable\u func\u helper.pxi”,第367行,在pandas.\u libs.hashtable.value\u count\u对象中(pandas/_libs/hashtable.c:29189)
TypeError:不可损坏的类型:“列表”
列表
不可损坏 字面意思是什么;不能散列
列表
对象
dict
s使用对象的哈希值查找key->value;那样更快


改为使用
tuple
,因此在返回字符串列表的地方,只需调用
tuple(…)
。元组是不可变的有序集合,除了不可变和可散列之外,它们的行为类似于列表。

每当您发布错误时,请将整个跟踪回传。您是否意识到当用作键时,散列标记需要是字符串?但你的输入却不是这样。不确定是错别字还是错误。@utengr是的,那是错别字。我会修好的,谢谢。我不知道如何使用tuple()。在我的代码中它会去哪里?@ThomasErnste
series\u key\u values=pd.series(tuple(final\u keys\u list)).value\u counts()
我不确定我是否按照您的意图更改了代码。我尝试在我的代码中替换你的行“series\u key\u values=pd.series(tuple(final\u keys\u list)).value\u counts()”而不是我的行“series\u key\u values=pd.series(final\u keys\u list).value\u counts()”我得到了相同的错误消息--“TypeError:unhable type:'list'@ThomasErnste Hm.Try
final\u keys\u list.append(tuple(tweets by\u key))
此外,
系列键值=…
应在循环结束后执行。