Zastosowanie ustawia się znaleźć wszystkie odpowiedniki:
for (key, value) in set(aa.items()) & set(bb.items()):
print '%s: %s is present in both aa and bb' % (key, value)
operator &
tutaj daje Ci intersection of both sets; alternatywnie można napisać:
set(aa.items()).intersection(set(bb.items()))
Zauważ, że to nie tworzenie pełnych kopii obu dicts więc jeśli są bardzo duże ty to może nie być najlepszym rozwiązaniem.
Skrót byłoby tylko przetestować kluczy:
for key in set(aa) & set(bb):
if aa[key] == bb[key]:
print '%s: %s is present in both aa and bb' % (key, value)
Tutaj tylko skopiować klucze każdego dict zmniejszyć zużycie pamięci.
Przy użyciu Python 2.7, typ dict obejmuje additional methods do tworzenia wymaganych zestawów bezpośrednio:
for (key, value) in aa.viewitems() & bb.viewitems():
print '%s: %s is present in both aa and bb' % (key, value)
Są technicznie dictionary views ale dla celów tego problemu działają one tak samo.
Co jest pożądany rezultat? Czy chcesz mieć jedną wartość typu Boolean wskazującą, czy klucze * all * w 'aa', które pojawiają się również w' bb' mają pasujące wartości? Lub jedna wartość boolowska na klucz? Albo jakiś kod, który wypisuje '' Kluczowe i wartościowe dopasowania bota w aa i bb "' raz dla każdej pasującej pary klucz/wartość? –
Hmm ... Z widokiem na problem ze sposobem, w jaki powtarzasz "aa" (podpowiedź, to jest to samo co "aa.iterkeys()"), twoje podstawowe podejście jest w porządku. Co naprawdę chcesz poprawić? – SingleNegationElimination
Mam wrażenie, że wszyscy inni zdają się rozumieć, co Rajeev chce zrobić w pierwszej kolejności. Jednak odpowiedzi na zupełnie inne rzeczy ... –