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()。在我的代码中它会去哪里?@ThomasErnsteseries\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.Tryfinal\u keys\u list.append(tuple(tweets by\u key))
此外,系列键值=…
应在循环结束后执行。