Ich benutze Python-Wörterbuch, um die Zeit zwischen zwei Ereignissen zu berechnen, aber basierend auf meinem Ansatz bin ich Ausgabe verdoppelt. Hier meine Eingangsdaten ist (man beachte die jüngsten, die erste Zeile wird nicht so kann nicht ber Zeit in ausgegeben werden, nachdem es keine andere Veranstaltung):Python verhindern doppelte Ausgaben aus dem Wörterbuch
user_id,unix_timestamp,product_id
u_ab,149356478,p_4363423
u_ab,149356453,p_4363455
u_ab,149356422,p_4363456
Ich nehme die Daten und erstellen Sie ein Wörterbuch hier von anderen Nutzern Aktivität:
context_sessions = {'u_ab': [['u_ab', '149356478', 'p_4363423'], ['u_ab', '149356453', 'p_4363455'], ['u_ab', '149356422', 'p_4363456']]}
Hier ist mein Code:
for key, value in context_sessions.items():
num_pageviews = len(value)
if num_pageviews > 1:
for a in range(num_pageviews):
user_id = context_sessions[key][(a-1)][0]
view_time = context_sessions[key][(a-1)][1]
next_view_time = context_sessions[key][(a-2)][1]
product_id = context_sessions[key][(a-1)][2]
dwell_time = int(next_pageview_time) - int(pageview_time)
print(user_id, product_id, dwell_time)
Hier ist der Ausgang (Hinweis wiederholt Werte):
u_ab, p_4363455, 25
u_ab, p_4363455, 25
u_ab, p_4363456, 10
u_ab, p_4363455, 25
Überprüfen Sie Ihre Einrückung. Dies ist nicht gültig Python - die Dinge nach dem ersten 'für' sind auf der gleichen Einrückungsebene. –
Auch Ihre context_sessions für 'u_ab' haben eindeutig nur 3 Einträge, was es sehr unwahrscheinlich macht, dass Ihr 'for a in range' (len (context_sessions '' '' ')') 4 mal ausgeführt wird. Außerdem erwarte ich, dass "next_pageview_time" und "pageview_time" jeweils als "next_view_time" und "view_time" gemeint sind. Ich stimme Aryamccarthy zu - das ist kein [McVE]. –
Der von Ihnen gepostete Code wird nicht ausgeführt und liefert die von Ihnen angegebenen Ergebnisse. Daher habe ich diese Frage abgelehnt. Ihr Problem mit der Indizierung reicht jedoch aus, um auf das zu verweisen, was das meiste Ihres Problems ist, und es mag so weit verbreitet sein, dass es in Zukunft jemand anderen nutzen wird, also habe ich eine Antwort geschrieben. Wenn Sie Ihren Code hier aktualisieren, damit die Ausgabe tatsächlich mit Ihrer Eingabe übereinstimmt, vergewissern Sie sich, dass Sie einen Kommentar hinterlassen, und ich werde meinen Downvote entfernen. –