Me gustaría comparar elementos en un diccionario entre sí, y eliminar los elementos de acuerdo a algunos criterios de comparación. Y me encantaría que sea eficiente. Tengo una función que puede hacer esto, pero copia repetidamente el dictionay. Seguramente no es una forma superior:Comparar un dict a sí mismo y eliminar claves similares de manera eficiente
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}
Si hay un par de claves dentro de la tolerancia entre ellas, ¿qué importancia tiene eliminarse? –
@David Robinson - No, no, pero en el ejemplo anterior cuando la tolerancia = 2, solo debe permanecer una clave de 1,2,3,4. – fraxel