TypeError:列表索引必须是整数或片,而不是str |如何在Python中创建关联数组?
我在Python 3.8中遇到以下错误:TypeError:列表索引必须是整数或片,而不是str |如何在Python中创建关联数组?,python,Python,我在Python 3.8中遇到以下错误: results['article'] = row[0] TypeError: list indices must be integers or slices, not str 我的问题是: curb = conn.cursor(buffered=True) curb.execute(""" SELECT article, url
results['article'] = row[0]
TypeError: list indices must be integers or slices, not str
我的问题是:
curb = conn.cursor(buffered=True)
curb.execute("""
SELECT
article,
url
FROM
table
WHERE
id = %s
-- %s
LIMIT 2
""", (
test_id,
test_id
)
)
results = curb.fetchall()
for row in results:
results['article'] = row[0]
results['url'] = row[1]
我知道在这方面也有类似的问题,但是到目前为止我还不知道如何用python构建一个关联数组来服务于这个用例
我的目标是将这篇文章与yield语句一起传递,这就是为什么我试图将其放入某种关联数组中
def start_requests(self):
for result in self.results:
if validators.url(result['url']):
yield scrapy.Request(
url=result['url'],
callback=self.parse_item,
meta={'article': result['article']}
)
else:
print("Invalid URL ", format(result['url']))
另一个问题是
results
是一个设计用于返回0行或多行数据库的对象。您知道(因为您有id=xxx
)只返回一行。看起来您想要的是:
for row in results:
answer = dict(article=row[0], url=row[1])
break
如果没有返回行,您可能还需要将应答
初始化为无
根据您在下面的评论,听起来您想要:
answer = {}
for row in result:
article = row[0]
url = row[1]
answer[url] = article
这将为您提供一个从URL到文章的映射。如果您熟悉Python,可以使用字典理解将其简化为一行:
answer = {row[1]: row[0] for row in result}
这是你真正想要的吗:
cursor=conn.cursor(buffered=True)
执行(
# ...
)
#注意变量的名称
fetch_results=curb.fetchall()
结果=[]
对于fetch_结果中的行:
结果={}
结果['article']=行[0]
结果['url']=行[1]
#收集此行的其他信息。。。
results.append(结果)
Postprint(corb.fetchall())
“关联数组”的输出是Python中的dict({}
)results
不是一个dict,它是一个列表([]
)。@flakes返回“[]”,这很奇怪,因为当我在DB上执行它时,SQL返回2个expexted结果。也许参数化查询有问题?我添加了第二个参数,因为它不能只使用一个参数。实际上,将返回多行,这只是一个最小的示例OK。我本来想问另一个问题,直到我看到你只返回了一行。您有多对文章和URL。假设你有十排。您将有十个URL及其相关文章。你希望你的结果是什么样的?我不确定我是否理解你所说的单行是什么意思。结果返回2行(限制2)。每行包含一个URL和一篇文章。我的目标是获得数千行,在这些行中我知道哪篇文章属于哪一个URL,并在我的答案中看到其他注释。