2011-10-14 10 views
10

Aceptar por dinámico Quiero decir desconocido en tiempo de ejecución.en python, ¿cómo iterar un dict anidado con un número dinámico de nidos?

aquí es un diccionario:

aDict[1]=[1,2,3] 
aDict[2]=[7,8,9,10] 
aDict[n]=[x,y] 

No sé cuántos n será pero quiero bucle de la siguiente manera:

for l1 in aDict[1]: 
    for l2 in aDict[2]: 
    for ln in aDict[n]: 
     # do stuff with l1, l2, ln combination. 

¿Alguna sugerencia sobre cómo hacer esto? Soy relativamente nuevo en python, así que sea amable (aunque sí programo en php). Por cierto, estoy usando Python 3.1

Respuesta

11

Necesita itertools.product.

from itertools import product 

for vals in product(*list(aDict.values())): 
    # vals will be (l1, l2, ..., ln) tuple 
+1

perfecto! deberías ver lo que tengo que pasar en php para lograr esto. – khany

+2

Tenga cuidado de que sus elementos estarán en pedidos aleatorios – MatthieuW

+0

@MatthieuW mejora esto a continuación haciendo que la orden sea estable ... – smci

11

La misma idea que DrTyrsa, pero asegurándose de que el orden sea el correcto.

from itertools import product 

for vals in product(*[aDict[i] for i in sorted(aDict.keys())]): 
    print vals 
Cuestiones relacionadas