El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez <
stvz...@gmail.com> escribió:

> Hola gracias por tu sugerencia.
>
> Lo que necesito es por ejemplo:
>
> para el ID 1 el target es 100,
>
> entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ?
> 20, 30, 50, 15, 45, 60
> 20 + 30 + 50 = 100
>

Sin conocer la naturaleza de los datos, para una primera aproximación se
podrían obtener todas las combinaciones posibles de los valores y comprobar
si alguna suma el valor objetivo:

from itertools import combinations

combs = (lst for n in range(1, len(valores))
              for lst in combinations(valores, n)
              if sum(lst)==target)

res = next(combs, None)

Obtienes la primera combinación que sume el valor objetivo, o None si no
encuentra ninguna combinación. Se puede pensar alguna optimización más del
algoritmo según si los datos están ordenados o si supieras en qué rango se
mueven.

En cuanto a usar procesos, es fácil particionar el problema agrupando los
datos por ID (ya lo tienes hecho para generar el diccionario). El módulo
multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para
ponerte un ejemplo).



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a