2011-08-03 147 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]