utilizzare i set di trovare tutti gli equivalenti:
for (key, value) in set(aa.items()) & set(bb.items()):
print '%s: %s is present in both aa and bb' % (key, value)
l'operatore &
qui si dà la intersection of both sets; in alternativa, si potrebbe scrivere:
set(aa.items()).intersection(set(bb.items()))
Si noti che questo non creare copie complete di entrambi i dicts quindi se questi sono molto grandi questo potrebbe non essere l'approccio migliore.
Una scorciatoia sarebbe quello di testare solo le chiavi:
for key in set(aa) & set(bb):
if aa[key] == bb[key]:
print '%s: %s is present in both aa and bb' % (key, value)
Qui si copia solo le chiavi di ogni DICT per ridurre l'impronta di memoria.
Quando si usa Python 2.7, il tipo dict comprende additional methods di creare direttamente i set richiesti:
for (key, value) in aa.viewitems() & bb.viewitems():
print '%s: %s is present in both aa and bb' % (key, value)
Questi sono tecnicamente dictionary views ma per gli scopi di questo problema che agiscono allo stesso.
fonte
2012-05-31 11:08:15
Qual è il risultato desiderato? Vuoi un singolo valore booleano che indichi se * tutti * i tasti in 'aa' che appaiono anche in' bb' abbiano valori corrispondenti? O un valore booleano per chiave? O qualche codice che stampa '' Le corrispondenze dei bot chiave e valore in aa e bb "' una volta per ogni coppia chiave/valore corrispondente? –
Hmm ... Affrontando il problema con il modo in cui si esegue iterazione su 'aa' (suggerimento, equivale a' aa.iterkeys() '), il tuo approccio di base è in realtà giusto. Cosa vuoi veramente migliorare? – SingleNegationElimination
In qualche modo ho l'impressione che tutti gli altri sembrano capire cosa Rajeev vuole fare in primo luogo. Eppure le risposte a cose completamente diverse ... –