Liste mit Tuple und doppelte Einträge (gelöst)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tompee
User
Beiträge: 18
Registriert: Sonntag 7. Oktober 2007, 17:13

Hi,

bin noch ziemlich neu in Python und habe auch schon mein erstes Problem.
Ich habe z.B. folgende Liste:

Code: Alles auswählen

liste = [(15,100),(15,150),(14,333)]
Nun möchte ich, das wenn die erste Zahl in einem Tuple schon vorhanden ist, der Wert vom 2 Eintrag einfach adddiert wird zum schon existirenden.
Am Ende sollte also folgende Liste kommen:

Code: Alles auswählen

[(15,250),(14,333)]

Ich habe rausgefunden, das man mit set() doppelte Einträge aus Sequenzen löschen kann, aber ich glaube das hilft mir hier nicht weiter.

Hat vielleicht jemand ein Idee für mich?

Gruss Tompee
Zuletzt geändert von Tompee am Mittwoch 17. Oktober 2007, 20:41, insgesamt 1-mal geändert.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Du kannst die Liste in eine Menge (Set) konvertieren und dann wieder zurück:

Code: Alles auswählen

liste = list(set(liste))
Aber bist du sicher, dass du nicht einfach nur ein Set haben willst? Operationen wie "in" sind in Mengen nämlich schneller, da nicht die ganze Liste durchsucht werden muss.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich finde für sowas eignet sich ein Dict besser, da die Keys auch nur einmal Vorkommen dürfen und man an diese dann noch einen Wert anhängen kann:

Code: Alles auswählen

merged = dict()
for key, value in [(15, 100), (15, 150), (14, 333)]:
    merged[key] = merged.get(key, 0) + value
print merged
(ungetestet, aber es geht schon in etwa so)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Tompee
User
Beiträge: 18
Registriert: Sonntag 7. Oktober 2007, 17:13

Danke euch beiden. Funktioniert jetzt wunderbar.
Antworten