根据相关分数对列表进行排序

时间:2014-01-16 10:56:03

标签: python list sorting

我正在寻找一些基于的列表中创建项目集的帮助 协会分数。为了解释它,请参阅下面的字典对象和我想要生成的所需列表;

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之间。

1 个答案:

答案 0 :(得分: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