2014-01-16 129 views
-6

我正在尋找一些幫助,根據 關聯分數在列表中創建一個項目羣集。爲了解釋它,請看下面的字典對象和我期望生成的期望列表;根據關聯分數排序列表

確定指標的dict對象的:

strScoresDict[uniqueID] = (itemElement1, itemElement2, associatedScore) 

實施例:

('item1', 'item2', 100) 

('item1', 'item3', 40) 

('item1', 'item4', 80) 

('item2', 'item3', 40) 

('item2', 'item4', 100) 

('item3', 'item4', 20) 

排序的列表;來生成基於特定於業務的邏輯

('item1', 'item2', 'item4', 'item3') 

我的目標列表可具有多於1000個條目

的關聯得分和得分的範圍是固定的0100之間。

+0

你應該改進你的問題的描述,究竟是什麼(例子)你期望得到。 – elyase

+0

我不清楚你的規則是否清楚地對字典進行分類。 – YaleCheung

+0

我正在查找的輸出需要檢查關聯分數的權重並將最高得分的項目聚合在一起。 如上圖所示,例如,item1和item2是緊密關聯的,因此item2跟隨item1,但item2和item3與item2和item4相比具有較低的關聯分數,因此該序列需要將item3推出item4以下。 希望這有助於澄清我正在尋找的輸出。 – ipyinwild

回答

0

如下我會處理這個:

from collections import defaultdict # using defaultdict makes the sums easier 

correlations = defaultdict(int) # default to int (i.e. 0) 

for i1, i2, correl in strScoresDict: # loop through data 
    correlations[i1] += correl # add score for first item 
    correlations[i2] += correl # and second item 

output = sorted(correlations, 
       key=lambda x: correlations[x], 
       reverse=True) # sort keys by value 

但是請注意,輸出是

output == ['item2', 'item1', 'item4', 'item3'] 

由於總相關性

{'item1': 220, 'item3': 100, 'item2': 240, 'item4': 200} 

你可以read about defaultdict here