2017-02-21 29 views
-2

Lassen Sie uns sagen, dass ich eine Liste von Kunden-IDs und eine Kategorie von Einzelteil haben, dass er kauft:Counting Elemente in der Liste

[[ID0, 0], [ID1, 1], ...]

Ein Kunde kann mehr als einmal erscheinen, und es ist auch möglich, dass er den gleichen Artikeltyp mehrmals kauft.

Zum Beispiel ist es möglich, dass wir [ID0, 1], [ID0, 2], [ID0, 1], [ID1, 1], ... irgendwo in unserer Liste haben.

Ich möchte eine Liste erstellen, so dass die Liste [0] = Kundennummer und Liste [1] = die häufigste Art von Artikel, die er gekauft hat, was bedeutet, dass eine customerID nur einmal in der Liste erscheint.

Wie mache ich das?

+0

Bitte zeigen Sie Ihre Versuche. – Julien

+0

Entschuldigung. Alles was ich denken kann, ist eine naive Lösung, um verschachtelte Schleifen und Zähler zu verwenden. Aber wie Sie wissen, ist das sehr ineffizient. Ich bin ein Neuling in Python, so dass ich nicht wirklich mächtige Bibliotheken kann, die helfen können. –

Antwort

0

Wenn ich etwas nicht vermisse, können Sie kein Wörterbuch für diesen Zweck verwenden? Dies stellt grundsätzlich sicher, dass Sie keine Duplikate erhalten, und mit der Max-Funktion können Sie den maximalen Wert erhalten. Die Methode .get() stellt sicher, dass Sie eine None erhalten, wenn der Schlüssel nicht gefunden wird.

Natürlich können Sie das Wörterbuch bei Bedarf als Liste formatieren.

data = [ 
     ['ID0', 1], ['ID0', 2], ['ID0', 1], ['ID1', 1], 
     ['ID2', 5], ['ID5', 6] 
] 

dict = {} 
for item in data: 
    customer_id = item[0] 
    current_quantity = item[1] 
    #find maximum amount of what's already in dictionary vs current 
    dict[customer_id] = max(current_quantity, dict.get(customer_id))