2017-01-25 12 views
0
Scorelife_disct={'scorelife41': ['c', 'hindi', 'sql', 'scala', 'love'], 
'scorelife42': ['c', 'sql', 'english', 'Cat', 'html', 'cPlus', 'love'], 
'scorelife43': ['c', 'Cat', 'friend', 'love']} 

User_life_disct ={'scorelifeLife1': ['c', 'hindi', 'python', 'scala', 'graphics'], 
'scorelifeLife10': ['c', 'hindi', 'perl'], 
'scorelifeLife11': ['hindi', 'perl', 'spark']} 

import collections 
d = collections.defaultdict(dict) 

from __future__ import division 
for userid in Scorelife_disct: 
    #print userid 
    for life_disct in User_life_disct: 

     u1= Scorelife_disct[userid] 
     u2= User_life_disct[life_disct] 
     k1=len(set(u1)&set(u2))/len(set(u1)|set(u2)) 
     #print life_disct 
     #print k1 

     d[userid][life_disct] = k1 
     print d 
dict(d) 

Выход:Оптимизировать Python Панда код

{' scorelife41': {' scorelifeLife1': 0.42857142857142855, 
    ' scorelifeLife10': 0.3333333333333333, 
    ' scorelifeLife11': 0.14285714285714285 }} 

Я использую два словарь питона с Жаккаром сходством каждого списка словаря, но моя программа занимает слишком много времени для огромного количества данных. Как уменьшить проблему временной сложности (хотя выход является правильным), чтобы он работал, не занимая много времени?

+1

Как это использовать Панды? – James

ответ

0

вы можете использовать встроенные профилировщики, чтобы узнать, где ваш код является узким местом: How can you profile a python script?.

Учитывая фрагмент в вопросе, единственная ближайшая скорость до Я могу видеть, что вы работаете набор() больше, чем вам нужно:

for userid in Scorelife_disct: 
    #print userid 
    for life_disct in User_life_disct: 

     u1= set(Scorelife_disct[userid]) 
     u2= set(User_life_disct[life_disct]) 
     # multiply by 1.0 so that the results aren't rounded to nearest int() 
     k1=len(u1&u2) * 1.0 /len(u1|u2) 
     #print life_disct 
     #print k1 

     d[userid][life_disct] = k1 
     print d 

Помимо этого, вы можете посмотреть на другую структуру данных, чтобы представлять ваши данные и оптимизировать ее для наиболее распространенных операций.