我目前正在使用twitter API。到目前为止,我设法获得了一条特定的tweet作为json和prettyprint。输出为:
{
"contributors": null,
"coordinates": null,
"created_at": "Sun Jun 28 12:32:35 +0000 2020",
"display_text_range": [
19,
23
],
"entities": {
"hashtags": [],
"symbols": [],
"urls": [],
"user_mentions": [
{
"id": 11883745733410470,
"id_str": "11883745733410470",
"indices": [
0,
10
],
"name": "Account1",
"screen_name": "account1"
},
{
"id": 27822535,
"id_str": "27822535",
"indices": [
11,
18
],
"name": "Account2",
"screen_name": "account2"
}
]
},
"favorite_count": 0,
"favorited": false,
"filter_level": "low",
"geo": null,
如何将关键实体的所有值-> user_mentions-> screen_name存储在变量,列表或其他内容中?我只想存储它们,以后再做些事情。
到目前为止,我得到了:
def on_data(self, data):
# Twitter returns data in JSON format - we need to decode it first
decoded = json.loads(data)
#print(json.dumps(decoded, indent=4, sort_keys=True))
tweet_id = decoded['id_str']
username = decoded['user']['screen_name']
text = decoded['text']
is_reply = decoded['in_reply_to_status_id']
mentions = decoded['entities']['user_mentions']['screen_name']
这给了我一个错误,因为它当然返回了多个screen_name。
mentions = decoded['entities']['user_mentions']['screen_name']
TypeError: list indices must be integers or slices, not str
答案 0 :(得分:4)
该错误为您提供了很好的提示。
decoded['entities']['user_mentions']
是一个列表,因此您可以使用以下方法获取所有屏幕名称:
for name in decoded['entities']['user_mentions']:
# name['screen_name'] now is the name you want
print(name['screen_name'])
如果您想要一个包含所有屏幕名称的长字符串,或执行其他各种操作,还可以使用列表函数(如@Sushanth注意到的join)。
答案 1 :(得分:1)
screen_names = [
screen_name["screen_name"] for screen_name in decoded["entities"]["user_mentions"]
]
decoded['entities']['user_mentions']
是一个列表,因此您只能使用索引进行访问。
def on_data(self, data):
# Twitter returns data in JSON format - we need to decode it first
decoded = json.loads(data)
#print(json.dumps(decoded, indent=4, sort_keys=True))
tweet_id = decoded['id_str']
username = decoded['user']['screen_name']
text = decoded['text']
is_reply = decoded['in_reply_to_status_id']
screen_names = [screen_name["screen_name"] for screen_name in decoded['entities']['user_mentions']]
答案 2 :(得分:0)
ffmpeg -re -i /home/dr_click/live.wav -af "anequalizer=c0 f=200 w=100 g=-5 t=0|c1 f=200 w=100 g=-5 t=0, anequalizer=c0 f=1000 w=100 g=3 t=0|c1 f=1000 w=100 g=3 t=0" -acodec pcm_s16be -ar 44100 -ac 2 -f rtp rtp://127.0.0.1:1234
是一个列表。
您可以使用decoded['entities']['user_mentions']
来查看
type()
要获取单个名称,您必须使用索引print( type( decoded['entities']['user_mentions'] ) )
,[0]
和更高版本的[1]
["screen_name"]
要获取所有这些内容,您需要进行print( decoded['entities']['user_mentions'][0]["screen_name"] )
print( decoded['entities']['user_mentions'][1]["screen_name"] )
循环
for
或列表理解
names = []
for item in decoded['entities']['user_mentions']:
#print( item["screen_name"] )
names.append(item["screen_name"])
print(names)
最小的工作示例
names = [item["screen_name"] for item in decoded['entities']['user_mentions']]
print(names)