2013-06-14 11 views

Odpowiedz

18
for (i, j), (k, v) in zip(d.items(), c.items()): 
    print i, j, k, v 

Pamiętaj, że zamówienie będzie dowolne, chyba że twoje słowniki są OrderedDict s. Aby być pamięć wydajny

w Pythonie 2.x (gdzie dict.items i zip tworzenia list) można wykonać następujące czynności:

from itertools import izip 
for (i, j), (k, v) in izip(d.iteritems(), c.iteritems()): 
    print i, j, k, v 

To niekoniecznie będzie szybciej, jak można zaobserwować na małych list to Szybciej do iteracji na tych listach pośrednich jednak zauważysz poprawę szybkości podczas iteracji bardzo dużych struktur danych.

Pythona 3.x zip jest taka sama jak izip (która już nie występuje) i dict.items (dict.iteritems nie istnieje) zwraca view zamiast liście.

2

Państwo pytanie nie było jasne, czy chcesz iteracyjne słowniki w dwóch pod-for-pętle lub obok siebie (jak to zrobiono w użytkownika @ jamylak odpowiedź)

Oto zagnieżdżona interpretacja

from itertools import product 
for (i, j), (k, v) in product(d.items(), c.items()): 
    print i, j, k, v 

np

>>> d={'a':'Apple', 'b':'Ball'} 
>>> c={'1':'One', '2':'Two'} 
>>> from itertools import product 
>>> for (i, j), (k, v) in product(d.items(), c.items()): 
...  print i, j, k, v 
... 
a Apple 1 One 
a Apple 2 Two 
b Ball 1 One 
b Ball 2 Two 
+0

Chyba warto wspomnieć * jak * pytanie było jasne - w szczególności 'product' daje podobny wynik do iteracji słowniki w dwóch zagnieżdżonych * * for-pętle, w Odpowiedź hyl jamylak przy użyciu 'zip' daje podobny wynik do dwóch * przyległych * pętli for. – lvc