0

リスト内の対になった辞書で出力を返す Python 経由で SQL データベースを呼び出します。

[{'Something1A':Num1A}, {'Something1B':Num1B}, {'Something2A':Num2A} ...]

このリストを反復処理したいのですが、同時に 2 つの辞書をプルします。

for obj1, obj2 in <list>これが正しい方法ではないことはわかっていますが、それは何ですか?

4

7 に答える 7

3

ここで使用zip()します。

>>> testList = [{'2': 2}, {'3':3}, {'4':4}, {'5':5}]
>>> for i, j in zip(testList[::2], testList[1::2]):
        print i, j


{'2': 2} {'3': 3}
{'4': 4} {'5': 5}

代替(を使用せずにzip()):

for elem in range(0, len(testList), 2):
    firstDict, secondDict = testList[i], testList[i+1]
于 2013-07-21T19:46:32.207 に答える
2

イテラブルでアイテムをグループ化するためのPythonのイディオムは

zip(*[iter(iterable)])*n)

iterableは辞書のリストで、n2 のグループにする場合は 2 です。

解決策は次のようになります。

>>> data = [{'A':1}, {'B':2}, {'C':3}, {'D':4}]
>>> for dict1, dict2, in zip(*[iter(data)]*2):
    print dict1, dict2


{'A': 1} {'B': 2}
{'C': 3} {'D': 4}
>>> 

これはスライシングに依存していません。つまり、この場合、zip が「圧縮」している 2 つのシーケンスが を介してオンザフライで生成されているため、メモリ効率が高く、高速である可能性が高いこと意味iter(data)します。スライス、秒スライスの場合は 1、zip の場合は 1)。

なんらかの理由でデータが非常に大きかった場合、zip が一度ループするだけで返すまったく新しいタプルのリストを構築したくないでしょう。その場合itertools.izip、 の代わりに使用できますzip

于 2013-07-21T21:41:48.233 に答える
0

単に

Python 2で

li = [{'Something1A':10}, {'Something1B':201}, {'Something2A':405} ]
from itertools import imap
for a,b in imap(lambda x: x.items()[0], li):
    print a,b

Python 3 では、map()すでにジェネレーターです

于 2013-07-21T22:18:04.407 に答える
-1

index を使用して、リストから 2 つの要素をフェッチします。

testList = [{'2': 2}, {'3':3}, {'4':4}, {'5':5}]
for i in range(0,len(testList),2):
    print(testList[i],testList[i+1])
于 2013-07-21T19:49:18.373 に答える