2017-01-25 83 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 }} 

我使用與字典的每個列表之間的Jaccard相似兩個Python字典,但我的程序佔用太多的時間,大量的數據。如何減少時間複雜性問題(儘管輸出是正確的),以便它在不花費很多時間的情況下工作?

+1

這是如何使用熊貓? – James

回答

0

您可以使用內置的分析器來查看您的代碼瓶頸:How can you profile a python script?

鑑於問題的片段中,只有立即加速,我可以看到的是,你正在運行的set()比你更需要:

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 

除此之外,你可能想看看一個不同的數據結構來表示您的數據並針對最常見的操作進行優化。