2011-08-03 235 views
1

我的問題是如何將字典值映射到行索引。我有一本字典,如:映射字典與行值

ordered_dict = OrderedDict(1:"id", 2:"name", 3:"address", 4:"salary") 

而且我從拿到行的select查詢,如:

row = ["David", 4500, "France", 121] 

用下面的代碼,在那裏我得到id在字典中第一個指數,該指數是萬一第四的row,我想映射它們,使得變量值實際上將從rowid中獲得值。

for item in ordered_dict.iteritems: 
    value = row[index of current item in dictionary] # which is 1 for the id. 

但我想的idrow索引。即。

value = row[index of id in row] # that is, value = row [4] 

,這樣我可以檢索idrow的值,這是121

我無法打破字典或select查詢的當前結構,所以我正在尋找一種將行項映射到字典的方法。

編輯:在上面的代碼是我所得到的第一次迭代是

value = row[0] # here 0 is the id of dictionary, 

但如果row[0]將檢索"David"爲指標的row0包含"David",我想的id指數與row映射,這在我的例子中是3,所以我會得到value = row[3],這裏3id的索引row,因此我會得到121作爲結果。

+1

我不明白你的問題。你能否提供預期的產出? –

+0

你可以發佈你的查詢檢索數據?您可以在查詢中選擇列時進行所需的順序,以便它可以與字典映射 –

+0

我已使用預期輸出編輯了我的文章。 –

回答

3

這應該做的工作:

results = cursor.fetchall() 
col_names = [column[0] for column in cursor.description] 
rows_dict = map(lambda row: dict(zip(col_names, row)), results) 

它的工作對PostgreSQL和sqlite3的,但我還沒有與MySQL進行了測試。如果Postgres的IndexError或類似的東西出現這種情況,請嘗試更改第二行:

col_names = [column.name for column in cursor.description]