2017-09-14 50 views
0

我正在使用Python3,我目前正試圖重構一些代碼,特別是這看起來有點草率。現在我有一個循環標準,通過元組列表並將它們與硬編碼密鑰配對。是否有更多pythonic方式來處理合並列表元組列表到字典中?

values = [ 
     (1, 'test1', 15.5), 
     (2, 'test2', 31.67), 
     (3, 'item1', 16.5), 
     (4, 'bike1', 15.5), 
    ] 

    keys = ['id', 'name', 'price'] 

    items = [] 

    for row in values: 
     items.append({'id': row[0], 'name': row[1], 'price': row[2]}) 

    return items 

下面是一個類似的文章 More efficient way to create JSON from Python

但是我有一個很難搞清楚如何如何處理這個事實我兩組數據是相當不同的

items = [row for row in result] 
    columns = [key[0] for key in cursor.description] 

    print([{key: val} for key, val in zip(columns, items)]) 

我凸輪與此相適應,理論上可以將其濃縮爲一行。但是,由於我的數據是不是1對1(即列表VS tupels列表)它給了我這個...

[{'id': (1, 'bike2', 15.5)}, {'name': (2, 'test', 31.67)}, {'price': (3, 'bike3', 15.5)}] 

UPDATE

這是我最後的解決方案,謝謝馬亭!

items = [dict(zip([key for key in keys], row)) for row in result] 

回答

1

你幾乎在那裏;你需要一次壓縮各行,不是所有行:

[dict(columns, row) for row in result] 

但是,你可以簡單地告訴sqlite產生字典的每一行,通過設置row_factory

def dict_factory(cursor, row): 
    return {d[0]: col for d, col in zip(cursor.description, row)} 

connection.row_factory = dict_factory 

此時您只需將遊標結果作爲列表返回即可:

return cursor.fetch_all() 
相關問題