リスト内の対になった辞書で出力を返す Python 経由で SQL データベースを呼び出します。
[{'Something1A':Num1A}, {'Something1B':Num1B}, {'Something2A':Num2A} ...]
このリストを反復処理したいのですが、同時に 2 つの辞書をプルします。
for obj1, obj2 in <list>
これが正しい方法ではないことはわかっていますが、それは何ですか?
リスト内の対になった辞書で出力を返す Python 経由で SQL データベースを呼び出します。
[{'Something1A':Num1A}, {'Something1B':Num1B}, {'Something2A':Num2A} ...]
このリストを反復処理したいのですが、同時に 2 つの辞書をプルします。
for obj1, obj2 in <list>
これが正しい方法ではないことはわかっていますが、それは何ですか?
ここで使用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]
イテラブルでアイテムをグループ化するためのPythonのイディオムは
zip(*[iter(iterable)])*n)
iterableは辞書のリストで、nは2 のグループにする場合は 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
。
単に
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()
すでにジェネレーターです
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])