如何将对象附加到表中

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

【讨论】:

同样的问题。当我在函数内打印表格时,我得到了想要的结果,但全局变量保持为空

以上是关于如何将对象附加到表中的主要内容,如果未能解决你的问题,请参考以下文章

在excel中将数据从外部csv附加到表中

将数据字段附加到保存到表中的记录

从外部将 td 附加到表中

将子对象添加到表中 当父对象保存到上下文中时

用于检查的TestMethod如果将对象成功添加到表中

如何从单个文件中读取不同的模式 json 对象并将其保存到表中