1

私の問題は、辞書の値を行のインデックスにマップする方法です。私は次のような辞書を持っています:

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

そして、私は次のselectようなクエリから行を取得しました:

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

次のコードではid、辞書の最初のインデックスとして取得します。これは、の場合は4番目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,

しかし、がcontainsのインデックスとして取得row[0]する場合は、のインデックスをにマップする必要があります。これは、私の例では、を取得するために、ここにinのインデックスがあるため、結果として取得します。"David"0row"David"idrow3value = row[3]3idrow121

4

1 に答える 1

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 などのエラーが発生した場合は、次の 2 行目を変更してみてください。

col_names = [column.name for column in cursor.description]
于 2011-08-03T09:20:44.870 に答える