2012-10-10 25 views
9
d = { 
    "local": { 
     "count": 1, 
     "health-beauty": { 
      "count": 1, 
      "tanning": {"count": 1} 
     } 
    }, 
    "nationwide": {"count": 9.0}, 
    "travel": {"count": 0} 
}  

En este caso, "nationwide" es el más grande.Buscar máximo en el diccionario anidado

Código está por debajo para que sea más fácil para adjuntar a los guiones:

d = {'travel': {'count': 0}, 'local': {'count': 1, 'health-beauty': {'count': 1, 'tanning': {'count': 1}}}, 'nationwide': {'count': 9.0}} 
+0

estaba mirando 'impresión max (d, clave = lambda x: x [1]) ' – AlexZ

+1

deberías haber hecho que el local.tanning sea el más grande ... ya que ninguna de las respuestas lo encontraría ... –

+0

Si el" bronceado "fue 10, y necesitas capturar eso, es posible que necesite aplanar el diccionario. Pruebe algo como esto [http://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries-compressing-keys](http://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries- compriming-keys) –

Respuesta

10
>>> max(d, key=lambda x: d[x]['count']) 
'nationwide' 
+1

¡Leyenda! Casi estaba allí gracias por esto – AlexZ

+2

esto no funcionará ... diga si su dict interno es el más grande (ya que ni siquiera considera los diccionarios anidados) –

+1

Joran: el recuento se incrementa para cada niño ... – AlexZ

1

Esto debería funcionar para el diccionario anidada:

def find_max(d, name=None): 
    return max((v, name) if k == "count" else find_max(v, k) for k, v in d.items()) 

>>> find_max(d) 
(9.0, 'nationwide') 
+1

que no funcionará No creo ... local tiene un recuento de claves y más entradas que cada uno tiene su propio recuento ... –

+0

@JoranBeasley solucionó – defuz

+0

buen trabajo :) ... –

Cuestiones relacionadas