簡體   English   中英

計算元組列表中唯一元組的發生率

[英]Calculating incidence of unique tuples in a list of tuples

對於分類Django網站項目,我有一個由(user_id, ad_id)對組成的元組列表。 這表示點擊者的user_id以及相關的ad_id

例如:

gross_clicks = [(1, 13),(1, 12), (1, 13), (2, 45), (2, 13), (1, 15), ...(n, m)]

此列表中的元素絕不是唯一的-每次點擊都會被推送到此列表中,無論是同一用戶和/或同一廣告。

現在,我可以通過執行以下操作獲得所有唯一點擊:

unique_clicks = []
import operator
gross_click_ids = map(operator.itemgetter(0), gross_clicks)
return len(set(gross_click_ids))

但是,如何獲得每個廣告的唯一點擊 也就是說,如果同一用戶點擊了兩個不同的廣告,則將被計為2次單獨的點擊。

性能也很重要-它是一個大數據集-因此,它會首選最有效的解決方案以及一個說明性示例。

而是在queryset上使用distinct方法。 假設您的模型是User並且您想要獲得唯一的user_idad_id對。

User.objects.all().values_list('id', 'ad_id').distinct('id', 'ad_id')

這將在數​​據庫級別執行工作,因此我希望它比Willem提到的在Python中完成工作要快。

可能誤解了您的問題。 如果是這種情況,請告訴我,以便我嘗試提供替代解決方案。

只需采用唯一的元組:

unique_clicks = set(gross_clicks)

這為您提供了每個廣告的唯一身份用戶印象集。

在示例輸入中, (1, 13)出現兩次,但是在一組中,它只會出現一次:

>>> gross_clicks = [(1, 13), (1, 12), (1, 13), (2, 45), (2, 13), (1, 15)]
>>> set(gross_clicks)
{(1, 12), (1, 13), (1, 15), (2, 45), (2, 13)}

在給定大量元組作為輸入的情況下,使用集合來跟蹤唯一元素是盡可能高效的(測試集合中是否已有給定的元組是O(1)恆定時間操作)。

但是,如果此數據來自您的數據庫,則要求為您提供唯一的對更為有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM