Chcę, aby wygenerować następujący efekt:Jak przeglądać dwa słowniki w jednej pętli for?
for i, j in d.items() and k, v in c.items():
print i, j, k, v
To jest złe. Chcę wiedzieć, jak mogę to osiągnąć?
Chcę, aby wygenerować następujący efekt:Jak przeglądać dwa słowniki w jednej pętli for?
for i, j in d.items() and k, v in c.items():
print i, j, k, v
To jest złe. Chcę wiedzieć, jak mogę to osiągnąć?
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.
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
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