es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar todas las posibles combinaciones de valores de listas de tamaños diferentes.

Tengo un dict de Python con listas de diferente longitud como valores de clave.

{
    'basis1': ['key11', 'key12', 'key13', 'key14'],
    'basis2': ['key21'],
    'basis3': ['key31', 'key32', 'key33'],
    'basis4': ['key41', 'key42'],
    ...'basisX': ['keyX1', ..., 'keyXX']
}

¿Cómo puedo obtener todas las combinaciones posibles de todos los valores de clave del dict (un valor de cada clave a otro valor de otra clave)? Me refiero no solo a los valores “basis1 + basis2 + … basisX”, sino también, por ejemplo, valores “basis2 + basis1 + basis3” y valores “basis3 + basisX”.

Solía iterar con una función “product” de “itertools” para generar palabras clave por fórmulas predeterminadas. Pero hay una limitación debido a las fórmulas y la cantidad de listas que hay en estas fórmulas. Pero necesito que no dependa de la cantidad de listas que se alimentarán a la entrada de la función, así como mezclar en un orden diferente los valores de las listas.

from itertools import product
...
...
...

<h1>Cada [keysX] es una lista de valores</h1>

<pre><code>fórmula1 = [keys0] + [keys1]
fórmula2 = [keys0] + [keys2]
fórmula3 = [keys1] + [keys2]
fórmula4 = [keys0] + [keys1] + [keys2]
todas_las_palabras_clave = []

for combo in product(*fórmula1):
    todas_las_palabras_clave.append(" ".join(combo))

for combo in product(*fórmula2):
    todas_las_palabras_clave.append(" ".join(combo))

for combo in product(*fórmula3):
    todas_las_palabras_clave.append(" ".join(combo))

for combo in product(*fórmula4):
    todas_las_palabras_clave.append(" ".join(combo))
</code></pre>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener todas las posibles combinaciones de los valores de clave de un diccionario, se puede utilizar la función product del módulo itertools. Primero, es necesario crear una lista de listas que contenga todos los valores de clave del diccionario. Una vez que tenga esta lista, puede pasarla a la función product para generar todas las posibles combinaciones.

    Aquí hay un ejemplo de código:

    from itertools import product
    
    mi_diccionario = {
        'base1': ['clave11', 'clave12', 'clave13', 'clave14'],
        'base2': ['clave21'],
        'base3': ['clave31', 'clave32', 'clave33'],
        'base4': ['clave41', 'clave42'],
    }
    
    # Crear una lista de listas conteniendo todos los valores de clave
    listas_clave = [v for v in mi_diccionario.values()]
    
    # Utilizar la función product para generar todas las posibles combinaciones
    combinaciones = list(product(*listas_clave))
    
    # Imprimir el resultado
    for combo in combinaciones:
        print(combo)
    

    Esto mostrará todas las posibles combinaciones de los valores de clave, incluyendo aquellas en las que las claves están mezcladas en un orden diferente.

Comments are closed.