2016-12-31 1 views
-3

J'ai obtenu un dictionnaire imbriqué qui ressemble à ceci:Comment obtenir la plupart des valeurs imbriquées?

d = {"my momma" : {"your momma" : 1}, "flying on" : {"a broom" : 2}} 

je dois multiplier par 2.

toutes les valeurs les plus imbriquées (le 1 et le 2) Comment puis-je faire? Je ne peux tout simplement pas y accéder.

+0

Où est votre code et ce qui est précisément le problème avec elle? Fournissez un [mcve]. – jonrsharpe

+0

Je n'ai pas de code. J'ai essayé d'attraper les valeurs avec une boucle for mais cela n'a pas fonctionné. – spiderkitty

+2

Cela ressemble beaucoup à ce que vous * avez * du code alors. Est-ce qu'une boucle 'for' en quelque sorte * pas * code? Montrez de l'effort! – jonrsharpe

Répondre

-2
for key in d: 
    for skey in d[key]: 
     d[key][skey] *= 2 
print d 
+0

Merci beaucoup! Cela fonctionne bien! – spiderkitty

0

Recursion, si vous ne savez pas combien de niveaux d'imbrication, vous aurez:

INDEX = [] 

def disMantle(target, depth): 
    # ensure a list for given depth 
    while len(INDEX) <= depth: INDEX.append([]) 
    # analyze given target 
    for key in target: 
     atype = type(target[key]) 

     if atype == dict: 
      # next depth 
      disMantle(target[key], depth+1) 
     elif atype in [int,float]: 
      # record the numeric values 
      INDEX[depth].append({'key':key,'value':target[key]}) 

d = {"my momma" : {"your momma" : 1}, "flying on" : {"a broom" : 2.0}} 

disMantle(d, 0) 
print INDEX[-1]