我正在处理一个有200万对的数据集,这些数据集的排列方式如此。
pair_relation item1_id item2_id
1 100 101
1 101 102
1 102 103
0 103 104
此处pair_relation
以二进制形式显示item1
和item2
之间的平等关系。现在,我希望以item100
等于item101
且item101
等于item102
且item102
为item103
的方式,基于现有信息生成新对等于item103
但item104
不等于item104
,这意味着item102
也不等于item101
,item100
和{{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中,必须有一种高效而复杂的方法来实现它。我们将不胜感激。
答案 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 。随意纠正它。