You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python操作MySQL拉取词黑名单时如何将元组列表转为字符串列表

实现格式转换的方案

核心原理

MySQL的cursor.fetchall()返回的查询结果是由「行元组」组成的列表,哪怕你只查询word单个字段,每一行的结果也会被封装成长度为1的元组,所以你只需要取出每个元组的第0位元素,就能得到纯字符串的敏感词列表。

适配不同需求的实现方式

方案1:无需保持查询顺序、优先去重效率(最高效,适配万级数据无压力)

直接用集合推导式去重,再转成列表:

cursor.execute('SELECT word FROM blacklist')
# 集合自动去重,取每个行元组的第0位元素
blacklist = list({row[0] for row in cursor.fetchall()})

方案2:需要保持数据库查询的原始顺序

如果需要保留敏感词在数据库中返回的顺序,推荐用有序字典去重(Python 3.7+版本原生支持字典有序),比列表循环判断in的效率高很多:

cursor.execute('SELECT word FROM blacklist')
blacklist = list(dict.fromkeys(row[0] for row in cursor.fetchall()))

方案3:保留原有循环逻辑(修正原有代码的bug)

你原有代码里的return逻辑存在问题:遇到第一个重复的敏感词就会直接终止整个循环,后续未处理的敏感词都不会加入列表,修正后写法如下:

cursor.execute('SELECT word FROM blacklist')
blacklist1 = []
for row in cursor.fetchall():
    word = row[0] # 取元组的第一个元素得到字符串
    if word not in blacklist1:
        blacklist1.append(word)

后续敏感词匹配优化建议

后续遍历校验文本敏感词时,如果只需要判断是否存在敏感词,可以直接把列表转成集合使用,判断xxx in 集合的时间复杂度是O(1),比列表的O(n)性能高很多,尤其数据量越大优势越明显。


内容的提问来源于stack exchange,提问作者user14904935

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:09:04