根据现有对及其关系创建新对

时间:2018-01-29 07:52:38

标签: python

我正在处理一个有200万对的数据集,这些数据集的排列方式如此。

pair_relation    item1_id    item2_id
1                100         101
1                101         102
1                102         103
0                103         104

此处pair_relation以二进制形式显示item1item2之间的平等关系。现在,我希望以item100等于item101item101等于item102item102item103的方式,基于现有信息生成新对等于item103item104不等于item104,这意味着item102也不等于item101item100和{{1} }}

pair_relation    item1_id    item2_id
1                100         101
1                101         102
1                102         103
0                103         104
0                102         104
0                101         104
0                100         104  

简而言之,如果A等于B而B not_equals C,那么A也是not_equals C,这是一种说法。我在python中实现了一个涉及三个循环的天真代码。它需要几个小时才能运行,有时会出现内存和崩溃的情况。在Python中,必须有一种高效而复杂的方法来实现它。我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设您的文件是csv:

for k in unrelated.keys(): #for each key in unrelated
    for vals in unrelated[k]:  #for each value of list at key-k
        if vals not in new_rel.keys():
            new_rel[vals]=[]
        new_rel[vals] += related[k]

它将返回字典相关,其中每个包含等于键的数字列表类似无关< / strong>也是不等于键的字典。

{100:[102,103],500:[102]}

示例:  如果无关包含{102:[related of 100 + related of 500], 103:[related of 100]},那么 new_rel 将包含for k in new_rel.keys(): #to eliminate duplicates eliminate_duplicate=set(new_rel[k]) new_rel[k]=eliminate_duplicate

<强>最后

path='/'

由于我没有任何数据需要测试,我无法确定这一点,因此代码可能是 buggy 。随意纠正它。