2016-03-31 8 views
1

optimieren Ich schreibe diesen Code, aber ich finde es sehr langsam und ich weiß nicht, wie man es wirklich im Laufe der Zeit zu verbessern. data ist ein Json-Objekt mit ca. 70 000 Schlüssel darin. Ich denke, der langsamste Teil ist der actors Teil, weil ich auf einer Liste (die höchstens 3 Elemente enthalten) iterieren.Wie kann ich im Laufe der Zeit diese Python-Code

genres_number = {} 
actors_number = {}  
for movie in data: 
    for genre in data[movie]["genres"]: 
     if data[movie]["actors"] != None: 
      for actor in data[movie]["actors"]: 
       if actor not in actors_number.keys(): 
        actors_number[actor] = 1 
       else: 
        actors_number[actor] = actors_number[actor] + 1 
     if genre not in genres_number.keys(): 
      genres_number[genre] = 1 
     else: 
      genres_number[genre] = genres_number[genre] + 1 
res = [] 
res.append(genres_number) 
res.append(actors_number) 
return res 
+2

Können Sie uns eine Vorstellung darüber, wie ‚Daten‘ strukturiert ist? – Erik

+1

Denken Sie auch nicht daran, was der langsamste Teil ist, [measure it] (https://docs.python.org/2/library/profile.html). –

Antwort

1

Wie funktioniert diese Arbeit für Sie

from collections import defaultdict 

def get_stats(data): 
    genres_number = defaultdict(int) 
    actors_number = defaultdict(int) 

    for movie in data: 

     actors = movie.get('actors') 
     if actors: 
      for actor in actors: 
       actors_number[actor] += 1 

     genres = movie.get('genres') 
     for genre in genres: 
      genres_number[actor] += 1 

    res = [] 
    res.append(dict(genres_number)) 
    res.append(dict(actors_number)) 
    return res 
+0

Warum verbessert das meinen Code? – mel

+0

In Ihrer Version des Codes haben Sie eine dreifach verschachtelte Schleife (für Schauspieler in Genres in Filmen), aber die Art, wie Sie auf die Daten verweisen, zeigt an, dass Genres und Akteure keine Beziehung zueinander haben. Indem Sie es in diese doppelt verschachtelte Struktur konvertieren, schleifen Sie nicht so oft. – John

Verwandte Themen