如何使用 python-telegram-bot 将列表中每 10 个项目的消息输出到聊天机器人

How to output message every 10 items in a list to the chatbot with python-telegram-bot

我正在用 python-telegram-bot 包编写一个 Telegram 机器人。 我想使用 python-telegram-bot 将存储搜索结果的列表输出到聊天机器人。有时结果超过 4000+ 字符而不允许输出。所以我想单独发送结果,如果列表中的项目超过 10 个,让它在每条消息的列表中发送 10 个项目。到目前为止,我现在可以通过聊天机器人输出我想要的少于 4000 个字符的格式但是我不知道如何制作每条消息 10 个项目?我检查了切片,但它似乎只适用于列表,但 python-telegram-bot 只导出文本。由于school_date是字典,我也尝试在"text = "Searching result:\n"" & "for i, school_data in enumerate(search_result): "之间放置for循环,并且在这个for循环之后,它一直重复最后一个或重复单行;使用了 split() (想 trim 来自修改后的文本)但它会弄乱输出格式。

这是我一直在工作的项目的理想输出格式:

university_name: blablabla
department: blablabla
staff_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
-----
university_name: blablabla
department: blablabla
staf_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
------
.
.
.

这是无论列表中有多少项我都可以打印的代码:

        search_result = []

        for items in data["staffs"]:
            specialisation = items["staff_specialisation"]
            if keyword in specialisation:
                search_result.append({"university_name": items["university"], "department": items["department"], "staff_name": items["staff_name"], "ranking": items["ranking"], "specialisation": items["staff_specialisation"], "website": items["website"]})

        text = "Searching result:\n"
        for i, school_data in enumerate(search_result):
            for key in school_data:
                text += "\n" + "{}:{}".format(key, school_data[key])
            text += "\n------"

        update.message.reply_text(text)

非常感谢!

我会在您迭代时将 reply_text() 放在 if item%10==9: 中。使用 %10 (modulo 10) 你将每 10 个循环做一些事情。为什么是9?因为枚举从 0 开始,而且 if 将在每个循环的末尾)。

但如果项目列表不是 10 的倍数,它会留下一些项目而不显示。例如,如果您的项目列表有 28 个项目,您将显示前 10 个项目,后 10 个项目,仅此而已,您将错过最后 8 个项目。要解决这个问题,最好使用 if item%10==9 or item==len(itemlist)-1:,因此 if 还会检查您是否在搜索结果的最后一项并执行最后的 reply_text()

text = "Searching result:\n"
for i, school_data in enumerate(search_result):
    for key in school_data:
        text += "\n" + "{}:{}".format(key, school_data[key])
    text += "\n------"
    if i%10==9 or i==len(search_result)-1:
        update.message.reply_text(text)
        text = "Searching result:\n"

在这种特殊情况下,if 子句位于第一个 for 循环中,即迭代 search_result 的循环。我们在 if.

中使用的 i 计数器也是如此