Vorrei confrontare gli elementi di un dizionario tra loro e rimuovere elementi in base ad alcuni criteri di confronto. E mi piacerebbe che fosse efficiente. Ho una funzione che può farlo, ma copia ripetutamente il dizionario. Sicuramente c'è un modo superiore:Confronta un dettato a se stesso e rimuovi le chiavi simili in modo efficiente
mydict = {1:5,2:7,3:9,4:9,7:7,8:0,111:43,110:77}
def partial_duplicate_destroyer(mydict,tolerance):
for key1 in mydict.keys():
mydict_copy = mydict.copy()
for key2 in mydict_copy.keys():
if key2 - tolerance < key1 < key2 + tolerance and not(key1 == key2):
del(mydict[key1])
break
return mydict
print partial_duplicate_destroyer(mydict,2)
print partial_duplicate_destroyer(mydict,20)
print partial_duplicate_destroyer(mydict,200)
#correct output:
# {4: 9, 8: 0, 111: 43}
# {8: 0, 111: 43}
# {111: 43}
Se ci sono una coppia di chiavi entro la tolleranza reciproca, è importante la cancellazione? –
@David Robinson - No, non è vero, ma nell'esempio sopra quando la tolleranza = 2, dovrebbe rimanere una sola chiave su 1,2,3,4. – fraxel