flambo hat geschrieben:
Beim ersten if (if value == 2:) möchte ich eigentliche alle MAC-Adressen welche zweimal vorkommen mit den Zusatzinformation in die Liste doublemacinf hinein bringen. Wenn aber eine MAC-Adresse mehr als 2mal vorkommt will ich diese in die Liste manymacinf hinein bringen. Dies geschieht mit dem zweiten if und funktioniert auch. Wenn ich aber drei MAC-Adressen habe welche in row[5] trusted3 haben dann will ich diese in keiner Liste. Das Problem: Es kommte dann doch immer eine MAC-Adresse in die Liste doublemacinf...
Das liegt daran, dass Du beim Einlesen jeder einzelnen Zeile eine neue Instanz von Counter(doublemac) auf dem aktuellen Stand der Liste doublemac erzeugst und untersuchst. Damit wird eine MAC-Adresse, die insgesamt dreimal vorkommt, beim zweiten Vorkommen in doublemacinf geschrieben, weil sie in diesem Augenblick die Bedingungen dafür erfüllt.
Einerseits ist Counter eigentlich dafür gedacht, auf die komplette Liste angewandt zu werden, wenn sie fertig ist, also nach der Schleife. Und die Information, wie oft ein bestimmter Schlüssel vorkommt, stimmt ja auch erst dann. Andererseits brauchst Du die Zusatzinformationen aus den Mehrfachzeilen, und die wären dann weg. Deshalb würde ich das Ganze von vornherein anders anfangen, ohne Counter:
Ein Dictionary, nennen wir es fullmacinf. Dort hinein kommt jede Zeile beim Lesen; die MAC-Adresse, also row[2] wird der Schlüssel. Für den Wert sehe ich zwei Möglichkeiten:
Wenn eine MAC-Adresse mehrfach vorkommt, genügt dann die Zusatzinformation aus der ersten oder letzten gefundenen Zeile, oder genügt sie nicht? Im Augenblick geht Dir die erste Zusatzinformation allemal verloren, die zweite und ggf. dritte bekommst Du - und eine vierte oder weitere geht wieder verloren.
Wenn Du eigentlich alle zwei, drei oder vielleicht noch mehr Zusatzinformations-Tupel brauchst, dann muss der Wert eine Liste dieser Tupel sein. Mit der Dictionary-Methode fullmacinfo.getdefault() (Details in der Dokumentation) lässt sich das ganz bequem machen. Am Ende gehst Du das Dictionary durch und prüfst jeweils die Länge der Liste. Ist sie 2 bzw. 3, guckst Du noch in die einzelnen Tupel wegen trusted2 bzw. trusted3 und schreibst Deine Tupel in die richtige Liste.
Dieses Verfahren funktioniert auch, wenn Du nicht alle Zusatzinformations-Zeilen brauchst (oder wenn die vielleicht sowieso bei gleichem Schlüssel übereinstimmen). Aber statt dessen könntest Du dann auch als Wert ein Tupel aus einer Zahl und Deiner Zusatzinformation bilden und den Wert jedesmal erhöhen, wenn Du wieder auf den gleichen Schlüssel triffst.