uso establece para encontrar todos los equivalentes:
for (key, value) in set(aa.items()) & set(bb.items()):
print '%s: %s is present in both aa and bb' % (key, value)
el operador &
aquí se da la intersection of both sets; alternativamente, se podría escribir:
set(aa.items()).intersection(set(bb.items()))
Tenga en cuenta que esto no crear copias completas de ambos predice así que si éstos son muy grandes que esto puede no ser el mejor enfoque.
Un acceso directo sería sólo para probar las teclas:
for key in set(aa) & set(bb):
if aa[key] == bb[key]:
print '%s: %s is present in both aa and bb' % (key, value)
Aquí sólo copia las claves de cada dict para reducir el consumo de memoria.
Al utilizar Python 2.7, el tipo dict incluye additional methods para crear los conjuntos requeridos directamente:
for (key, value) in aa.viewitems() & bb.viewitems():
print '%s: %s is present in both aa and bb' % (key, value)
Estos son técnicamente dictionary views pero para los propósitos de este problema que actúan de la misma.
¿Cuál es el resultado deseado? ¿Desea un único valor booleano que indique si las teclas * all * en 'aa' que también aparecen en' bb' tienen valores coincidentes? ¿O un valor booleano por clave? ¿O algún código que imprime '" Key y value bot coincide en aa y bb "' una vez por cada par clave/valor coincidente? –
Hmm ... Pasando por alto el problema con la forma en que iteras sobre 'aa' (pista, eso es lo mismo que' aa.iterkeys() '), tu enfoque básico está realmente bien. ¿Qué es lo que realmente quieres mejorar? – SingleNegationElimination
De alguna manera tengo la impresión de que todos los demás parecen entender lo que Rajeev quiere hacer en primer lugar. Sin embargo, las respuestas a cosas completamente diferentes ... –