簡體   English   中英

將python對象轉換為列表列表

[英]Convert python object to list of lists

我正在嘗試將sqlalchemy對象轉換為列表列表:

我試着做:

lambda q: [location.name for obj in q.all()]

而且有效。

但是,當我想在列表中添加/添加另一個時,它會中斷:

lambda q: [(location.name, obj.name for obj, location in q.all()]

這就是我想要的:

lambda q: [ [location.name, str(obj.flowrate)] for obj, location in q.all()]

預期產量:

[
    ['location name','10.0'],
    ['another location','20.15']
]

更新:

qry = db.Session.query(db.Log, db.Location).\
    filter(db.Log.location_id == db.Location.id).\
    filter(db.Log.location_id == id)

    helpers.write_csv_from_query(resp, qry, falcon.HTTP_200, header,
     lambda q: [
          [location.name, str(obj.flowrate)] 
     for obj,location in q.all()])

處理對象查詢的函數:

def write_csv_from_query(resp, query, status, header, result_func):
    """Writes CSV response."""
    csv_name = date_to_str(datetime.now()) + ".csv"
    csv_header = ','.join(header) + "\n"
    # csv_data = convert_to_csv(result_func(query))
    csv_data = []
    csv_data = result_func(query)
    csv_data = ','.join(csv_data)

    resp.status = status
    resp.content_type = 'text/csv'
    resp.set_header('Content-disposition', 'attachment; filename=' + csv_name)
    resp.body = csv_header + csv_data

由於在第一個示例中, location看起來與lambda分離(您的迭代變量稱為obj ,我假設location是某個外部變量( q和lambda的外部變量),因此您應該簡單地執行

lambda q: [(location.name, obj.name for obj in q.all()]

還是最后一個例子:

lambda q: [[location.name, str(obj.flowrate)] for obj in q.all()]

或者,因為obj.name似乎等同於location.name (這是從鏈接的要點中注釋掉的部分中得出的):

lambda q: [[obj.name, str(obj.flowrate)] for obj in q.all()]

甚至(對於鏈接表):

lambda q: [[obj.location.name, str(obj.flowrate)] for obj in q.all()]

(我不能說出您給出的正確公式是什么,但是我想這就是其中之一。)


摘要:僅迭代一(1)個對象,然后從該單個對象中提取信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM