Python中的简单聚类算法

2024-10-02 22:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下包含5个条目的列表:

my_lol = [['a', 1.01], ['x',1.00],['k',1.02],['p',3.00], ['b', 3.09]]

我想将上面的列表大致如下:

^{pr2}$

我希望在当天结束时得到以下清单:

dol = {'x':['x','a','k'], 'p':['p','b']}

本质上,列表字典是一个包含两个集群的集群。在

我试过了,但是从第三步开始就卡住了。正确的方法是什么?在

import operator
import json
from collections import defaultdict

my_lol = [['a', 1.01], ['x',1.00],['k',1.02],['p',3.00], ['b', 3.09]]
my_lol_sorted = sorted(my_lol, key=operator.itemgetter(1))

thres = 0.1
tmp_val = 0
tmp_ids = "-"

dol = defaultdict(list)
for ids, val in my_lol_sorted:
    if tmp_ids != "-":
        diff = abs(tmp_val - val)

        if diff < thres:
            print tmp_ids
            dol[tmp_ids].append(tmp_ids)

    tmp_ids = ids
    tmp_val = val

print json.dumps(dol, indent=4)

Tags: importjsonids列表ifmy集群val
2条回答
import operator
import json
from collections import defaultdict

my_lol = [['a', 1.01], ['x',1.00],['k',1.02],['p',3.00], ['b', 3.09]]
my_lol_sorted = sorted(my_lol, key=operator.itemgetter(1))

thres = 0.1
tmp_val = 0
tmp_ids = "-"

dol = defaultdict(list)
for ids, val in my_lol_sorted:
    if tmp_ids == "-":
        tmp_ids = ids
    else:
        diff = abs(tmp_val - val)
        if diff > thres:
            tmp_ids = ids
    dol[tmp_ids].append(ids)
    tmp_val = val

print json.dumps(dol, indent=4)

试试这个:

dol = defaultdict(list)
if len(my_lol) > 0:
    thres = 0.1
    tmp_ids, tmp_val = my_lol_sorted[0]

    for ids, val in my_lol_sorted:
        diff = abs(tmp_val - val)
        if diff > thres:
            tmp_ids = ids
        dol[tmp_ids].append(ids)
        tmp_val = val

相关问题 更多 >