如何将对象附加到表中
Posted
技术标签:
【中文标题】如何将对象附加到表中【英文标题】:how to append an object to a table 【发布时间】:2022-01-22 19:15:09 【问题描述】:我正在对象obj
中获取该用户的推文和相应的 ID。我想将对象附加到表中,但我得到一个空表。请问有什么问题吗?
tweet_tab = []
def searchTweets(client):
for i in users_name:
client = getClient()
user = client.get_user(username=i)
userId = user.data.id
tweets = client.get_users_tweets(userId,
expansions=[
'author_id', 'referenced_tweets.id', 'referenced_tweets.id.author_id',
'in_reply_to_user_id', 'attachments.media_keys', 'entities.mentions.username', 'geo.place_id'],
tweet_fields=[
'id', 'text', 'author_id', 'created_at', 'conversation_id', 'entities',
'public_metrics', 'referenced_tweets'
],
user_fields=[
'id', 'name', 'username', 'created_at', 'description', 'public_metrics',
'verified'
],
place_fields=['full_name', 'id'],
media_fields=['type', 'url', 'alt_text', 'public_metrics'])
if not tweets is None and len(tweets) > 0:
obj =
obj['id'] = userId
obj['text'] = tweets
tweet_tab.append(obj)
return tweet_tab
print("tableau final", tweet_tab)
【问题讨论】:
你真的打电话给searchTweets()
吗?
您在 for 循环的第一次迭代中“返回”。如果第一个用户名没有推文,则该表为空。
是的,我叫它searchTweets(client)
@saquintes
我应该在遍历所有用户后返回 tweet_tab 吗?@Michael Butscher
【参考方案1】:
问题看起来已经解决了,正如 Michael 指出的那样,return
声明放错了位置,但我想给你一个提示,可以帮助你在未来避免此类问题。良好的编程习惯说(如果可能)循环体应该在不同的函数中。这样我们就不会有错误放置返回的问题,看:
def searchTweet(username):
client = getClient()
user = client.get_user(username=username)
userId = user.data.id
tweets = client.get_users_tweets(...)
if not tweets: # it works because empty list evaluates to False
return None
return "id": userId, "text": tweets
def searchTweets():
tweet_tab = []
for i in users_name:
res = searchTweet(username=i)
if res is not None:
tweet_tab.append(res)
return tweet_tab
甚至使用 python 列表理解
def searchTweets():
res = [searchTweet(username) for username in users_name]
return [el for el in res if el is not None]
使用cache 装饰器,您可以多次调用此函数来获取只计算一次的列表。
from functools import cache
@cache
def searchTweets():
res = [searchTweet(username) for username in users_name]
return [el for el in res if el is not None]
【讨论】:
感谢您的回复。只是关于您所写内容的问题:当我将 tweet_tab 放在函数中时,我将无法在其他函数中使用,因为它不再是全局的。真的吗?我希望能够将该表的内容用作其他功能的输入 没错,但如果你需要它作为全局代码,可能会有一些不好的地方 - 请注意,如果你需要运行一次进程,你可以将 searchTweets 的结果存储在变量res = searchTweets()
然后 @987654327 @ 或者您可以使用缓存装饰器,因此结果将计算一次并存储在程序内存中 docs.python.org/3/library/functools.html#functools.cache
非常感谢@kosciej16
很高兴能帮上忙!如果解决方案适合您,请不要忘记投票和批准答案,让我们知道不需要更多帮助。【参考方案2】:
我认为你应该改变
if not tweets is None and len(tweets) > 0
到
if tweets is not None and len(tweets) > 0
或
if tweets and len(tweets) > 0
【讨论】:
同样的问题。当我在函数内打印表格时,我得到了想要的结果,但全局变量保持为空以上是关于如何将对象附加到表中的主要内容,如果未能解决你的问题,请参考以下文章