Listen in Liste + NoneType = gleiche Elemente zahlen

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
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Ich habe eine keyword_liste mit Listen als Elemente und darin stehen Keywords [["hallo", "zwei", "was", "drei"], None, None, ["hallo","vier","dreck"], None, ["was","geht"]].

Jetzt will ich gucken welche Keywords sind gleich und diese zählen und ausgeben mit deren Häufigkeit. Mein Problem ist aber der NoneType Error, weil da ja None steht, d.h. er hört nach dem Auslesen der ersten Liste auf, wie kann ich das denn nun lösen? hab schon mega viel versucht mit try und except, oder zu gucken ob das Keyword is not None und auch Anderes. So weit bin ich zur Zeit:

Code: Alles auswählen


zaehler = 0
for liste in keyword_liste:
        for keyword in liste:
            print type(liste)
            if keyword is not None:
                if keyword == keyword:
                    zaehler = zaehler + 1
                print keyword, zaehler
Danke schonmal im Vorraus
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Code: Alles auswählen

>>> from collections import Counter
>>> from itertools import chain
>>> data = [["hallo", "zwei", "was", "drei"], None, None, ["hallo","vier","dreck"], None, ["was","geht"]]
>>> counted = Counter(chain.from_iterable(each for each in data if each is not None))
>>> counted
Counter({'hallo': 2, 'was': 2, 'zwei': 1, 'drei': 1, 'dreck': 1, 'geht': 1, 'vier': 1})
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Als Alternative könnte man hier auch ``filter()`` benutzen:

Code: Alles auswählen

>>> flat_data = chain.from_iterable(filter(None, data))
>>> print(Counter(flat_data))
Counter({'hallo': 2, 'was': 2, 'zwei': 1, 'drei': 1, 'dreck': 1, 'geht': 1, 'vier': 1})
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Super danke Leute! Hat wunderbar geklappt, Topic kann geschlossen werden
Antworten