我有元素的列表,標籤對這樣的:[(e1, l1), (e2, l2), (e3, l1)]
用Cython詞典/地圖
我都數不過來二元多少標籤的共同點 - 即。在上面的列表e1
和e3
中共有標籤l1
,因此共有1個標籤。
我有這樣的Python實現:
def common_count(e_l_list):
count = defaultdict(int)
l_list = defaultdict(set)
for e1, l in e_l_list:
for e2 in l_list[l]:
if e1 == e2:
continue
elif e1 > e2:
count[e1,e2] += 1
else:
count[e2,e1] += 1
l_list[l].add(e1)
return count
它需要一個列表類似上面並計算元素對和計數的字典。上面列表的結果應該給出{(e1, e2): 1}
現在我必須將這個擴展到數百萬個元素和標籤,我認爲Cython會是一個很好的解決方案來節省CPU時間和內存。但是我找不到關於如何在Cython中使用地圖的文檔。
我將如何在純Cython中實現上述操作?
可以假定所有元素和標籤都是無符號整數。
在此先感謝:-)
將標籤作爲關鍵字和元素作爲標籤的值會更有意義嗎?如果你這樣設置它,那麼將1000萬個元素和〜50000個標籤的列表轉換爲字典只需要幾秒鐘。在排序元素時切換鍵和值需要大約一半的時間來製作字典。 – SirParselot
林不知道我跟着你...我怎麼能夠查找有多少共同的標籤2元素有? – user28906
啊,我誤解了你的問題。我以爲你在尋找共享標籤的所有元素。所以你的標籤和元素不一定是唯一的? – SirParselot