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

W tym przypadku "nationwide" jest największym.Znajdź maks. W zagnieżdżonym słowniku

Kod jest poniżej, aby ułatwić dołączenie do skryptów:

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

patrzył na 'druku max (d, key = lambda x: x [1]) ' – AlexZ

+1

powinieneś był uczynić local.tanning największym ... ponieważ żadna z odpowiedzi go nie znajdzie ... –

+0

Jeśli" garbowanie "było 10, i musisz to złapać, może być konieczne spłaszczenie słownika. Spróbuj czegoś takiego [http://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries-compressing-keys](http://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries- kompresujące-klucze) –

Odpowiedz

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

Legenda! Było prawie na miejscu dzięki temu – AlexZ

+2

to nie zadziała .. powiedz, jeśli twój wewnętrzny dykt jest największy (ponieważ nie uwzględnia nawet zagnieżdżonych słowników) –

+1

Joran: liczba wzrasta dla każdego dziecka ... – AlexZ

1

To powinno działać dla zagnieżdżonego słownika:

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

które nie zadziała Nie sądzę, że ... lokalny ma liczbę kluczy i więcej wpisów, z których każdy ma swój własny rachunek ... –

+0

@JoranBeasley naprawiony – defuz

+0

miła praca :) ... –

Powiązane problemy