Сопоставление словаря со значениями строк - PullRequest
1 голос
/ 03 августа 2011

Моя проблема в том, как сопоставить значения словаря с индексами строк. У меня есть словарь, как:

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

И я получил строки из запроса select, например:

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

С помощью следующего кода, где я получаю id в качестве первого индекса в словаре, который является четвертым в случае row, я хочу отобразить их так, чтобы значение переменной фактически получало значения из id из row.

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

Но я хочу индекс id в row. то есть.

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

, чтобы я мог получить значение id из row, которое составляет 121.

Я не могу разбить текущую структуру словаря или запрос select, поэтому я ищу способ сопоставления элементов строки со словарем.

Редактировать: в приведенном выше коде я получаю в первой итерации

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

Но если row[0] будет извлекать "David" как индекс 0 из row содержит "David", я хочу, чтобы индекс id был сопоставлен с row, что в моем случае 3 Например, чтобы я получил value = row[3], здесь 3 является индексом id в row, и, следовательно, я получу 121 в результате.

1 Ответ

3 голосов
/ 03 августа 2011

Это должно сделать работу:

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]
...