Python 动态迭代循环
我正在寻找一种更具活力的方式来写下面的语句Python 动态迭代循环,python,python-3.x,Python,Python 3.x,我正在寻找一种更具活力的方式来写下面的语句 data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13]] r表示传入的响应数据,我将其作为响应数据,并将项目枚举到字典中。这是可行的,但太静态了。如果添加或删除了数据,则需要对API代码进行调整,以对其进行说明 什么是处理这个问题的直观方法?下面是一个完整类的示例,以供参考 class Pots(Resource):
data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13]]
r
表示传入的响应数据,我将其作为响应数据,并将项目枚举到字典中。这是可行的,但太静态了。如果添加或删除了数据,则需要对API代码进行调整,以对其进行说明
什么是处理这个问题的直观方法?下面是一个完整类的示例,以供参考
class Pots(Resource):
def get(self, store):
print('USAGE: Received a request at POTS for Store ' + store )
conn = sqlite3.connect('store-db.db')
cur = conn.cursor()
cur.execute('SELECT * FROM Pots WHERE StoreNumber like ' + store)
res = cur.fetchall()
if not res:
print("RESPONSE: No data was found for this request.")
return('No data was found', 404)
else:
for r in res:
column_names = ["StoreNumber", "ForwardOnFail", "HuntLine","FirePrimary","FireSecondary", "BurglarPrimary", "BurglarSecondary","BurglarTertiary", "DNR", "PassengerElevator", "FreightElevator", "Escalator1", "Escalator2","ShopperTrak"]
data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13]]
datadict = {column_names[itemindex]:item for itemindex, item in enumerate(data)}
return(datadict, 200)
编辑:请忽略任何SQL效率低下的问题。虽然我很感谢您的建议,但我知道并且不打算在生产中使用此功能。仅用于测试。:) 为此使用切片
r[:14]
:
print(r[:14])
为此使用切片
r[:14]
:
print(r[:14])
通常的列表理解:
r = [1, 2, 3]
data = [r[0], r[1], r[2]]
data
[1, 2, 3]
data = [r[i] for i in range(len(r)-1)]
data
[1, 2, 3]
通常的列表理解:
r = [1, 2, 3]
data = [r[0], r[1], r[2]]
data
[1, 2, 3]
data = [r[i] for i in range(len(r)-1)]
data
[1, 2, 3]
你可能在找这样的东西 请注意,我们使用的是行工厂,因此我们得到
row.keys()
我还冒昧地
- 修复了SQL注入漏洞
- 添加limit子句(因为始终只返回一行)
- 由于上述原因,使用
代替fetchone()
fetchall()
你可能在找这样的东西 请注意,我们使用的是行工厂,因此我们得到
row.keys()
我还冒昧地
- 修复了SQL注入漏洞
- 添加limit子句(因为始终只返回一行)
- 由于上述原因,使用
代替fetchone()
fetchall()
假设您有这样的东西(使用pythonshell):
假设您有这样的东西(使用pythonshell):
data=r[:14]
?或者使用zip
组合r
和列名
,这将在短列表完成后丢弃任何不匹配项。您可能应该查看ORM系统,如sqlalchemy
请修复代码中的SQL注入:cur.execute('SELECT*FROM Pots WHERE StoreNumber like'+sto
应该是cur.execute('SELECT*FROM Pots WHERE StoreNumber like?)('sto,)
我同意切片,但请注意,根据r
的类型(例如numy数组)该切片实际上可能是r
上的一个视图,而不是一个新列表,即修改data
可能会修改r
@codepowned,因此这确实是一个X/Y问题……您确实希望将行作为列名返回给value dict,对吗?data=r[:14]
?或使用zip
组合r
和列名
,这将在短列表完成后丢弃任何不匹配项。您可能应该查看ORM系统,如sqlalchemy
请修复代码中的SQL注入:cur.execute('SELECT*FROM Pots WHERE StoreNumber like'+sto
应该是cur.execute('SELECT*FROM Pots WHERE StoreNumber like?)('sto,)
我同意切片,但请注意,根据r
的类型(例如numy数组)该切片实际上可能是r
上的一个视图,而不是一个新列表,即修改data
可能会修改r
@codepowned,因此这确实是一个X/Y问题……您真的希望将行作为列名返回给value dict,对吗?唯一的问题是它不会保留其“列名”
关联。on最重要的问题是,它不会保留其“列名”
关联。这是非常直观的,完全符合我的要求,而我没有完全明确的要求。很棒的工作,我会更新我的帖子,更简洁地解释这是我想要的结果。这是非常直观的,完全符合我的要求没有我完全清楚的要求。很棒的工作,我会更新我的帖子,更简洁地解释这是我想要的结果。将数据
切片到列名的长度
是不必要的,因为zip
使用了最短的可匹配参数的长度。将数据
切片到co>的长度列名称
是不必要的,因为zip
使用了最短的iterable参数的长度。