0

次のような.fetchall()の結果があります。

t = (('oranges',), ('apples',), ('pears',))

これを次のような辞書に変換するにはどうすればよいですか。

d = {'oranges':None, 'apples':None, 'pears':None}

4

2 に答える 2

2
>>> t = (('oranges',), ('apples',), ('pears',)    
>>> dict((item[0], None) for item in t)
{'pears': None, 'apples': None, 'oranges': None}
于 2012-08-14T10:15:24.087 に答える
1

Python2.7 以降では、dict 内包表記を使用するのが最速の方法です。

In [12]: {item[0]: None for item in t}
Out[12]: {'apples': None, 'oranges': None, 'pears': None}

古いバージョンの Python には、fromkeys メソッドがあります。

In [6]: dict.fromkeys([row[0] for row in t])
Out[6]: {'apples': None, 'oranges': None, 'pears': None}

では、どちらを使用するかをどのように決定しますか?すべてのメソッドが同等に読みやすい場合は、最速のメソッドを使用します。

[17]: t = [(str(i),) for i in range(10000)]

In [18]: %timeit dict((item[0], None) for item in t)
100 loops, best of 3: 3.36 ms per loop

In [19]: %timeit dict.fromkeys([row[0] for row in t])
100 loops, best of 3: 2.54 ms per loop

In [20]: %timeit {item[0]: None for item in t}
100 loops, best of 3: 2.24 ms per loop
于 2012-08-14T10:20:13.787 に答える