Trovare chiavi corrispondenti in due grandi dizionari e farlo velocemente

2022-07-29 10:30:07

Sto cercando di trovare le chiavi corrispondenti in due dizionari diversi. Ciascuno ha circa 600.000 voci.

Dì ad esempio:

    myRDP = { 'Actinobacter': 'GATCGA...TCA', 'subtilus sp.': 'ATCGATT...ACT' }
    myNames = { 'Actinobacter': '8924342' }

Voglio stampare il valore di Actinobacter (8924342) poiché corrisponde a un valore in myRDP.

Il codice seguente funziona, ma è molto lento:

    for key in myRDP:
        for jey in myNames:
            if key == jey:
                print key, myNames[key]

Ho provato quanto segue ma risulta sempre in un KeyError:

    for key in myRDP:
        print myNames[key]

C'è forse una funzione implementata in C per fare questo? Ho cercato su Google ma niente sembra funzionare.

Grazie.

- Austin Richardson

Source
Risposta


32
  • Usa i set, perché hanno un metodo integrato intersection che dovrebbe essere veloce:

    myRDP = { 'Actinobacter': 'GATCGA...TCA', 'subtilus sp.': 'ATCGATT...ACT' }
    myNames = { 'Actinobacter': '8924342' }
    
    rdpSet = set(myRDP)
    namesSet = set(myNames)
    
    for name in rdpSet.intersection(namesSet):
        print name, myNames[name]
    
    # Prints: Actinobacter 8924342