2016-10-19 2 views
3

Ich möchte wissen, ob es eine Möglichkeit gibt, Element Frequenzen in einer 2D-Python-Liste zu zählen. Für 1D-Listen können wirPython-Zählen Element Häufigkeit in einer 2D-Liste

list.count(word) 

verwenden, aber was ist, wenn ich eine Liste haben:

a = [ ['hello', 'friends', 'its', 'mrpycharm'], 
     ['mrpycharm', 'it', 'is'], 
     ['its', 'mrpycharm'] ] 

kann ich die Frequenz für jedes Wort in dieser 2D-Liste?

Antwort

5

Unter der Annahme, ich verstehe, was Sie wollen,

>>> collections.Counter([x for sublist in a for x in sublist]) 
Counter({'mrpycharm': 3, 'its': 2, 'friends': 1, 'is': 1, 'it': 1, 'hello': 1}) 

Oder

>>> c = collections.Counter() 
>>> for sublist in a: 
...  c.update(sublist) 
... 
>>> c 
Counter({'mrpycharm': 3, 'its': 2, 'friends': 1, 'is': 1, 'it': 1, 'hello': 1}) 
+0

Wissen Sie, ob ein Generator Ausdruck statt eine Liste Verständnis verwendet würde in einem Beschleunigungs führen? 'Counter (x für Unterliste in a für x in Unterliste)' –

2

können Sie verwenden ein defaultdict:

from collections import defaultdict 
d = defaultdict(int) 
for sublist in a: 
    for word in sublist: 
     d[word] += 1 
+0

falsche Sammlung –

+1

@ juanpa.arrivillaga Warum ist es eine falsche Sammlung? – MrPyCharm

+0

Sieh die Antwort von sberry –

1

Sie wissen bereits über list.count(). Einfach die Anzahl der Wörter in jedem sublist und sum eingeben. Zum Beispiel:

>>> my_word = 'its' 
>>> sum(sublist.count(my_word) for sublist in a) 
2 

Falls Sie die Häufigkeit von jedem Wort in Ihrem list vorhanden wollen, gibt es viele gute Antworten für die hier zur Verfügung. Alternativ, falls Sie es ohne import (mit normalen dict) tun möchten, können Sie tun:

my_dict = {} 
for sublist in a: 
    for item in sublist: 
     if item not in my_dict: 
      my_dict[item] = 0 
     my_dict[item] += 1 

# Value of my_dict: 
{'friends': 1, 'is': 1, 'it': 1, 'its': 2, 'mrpycharm': 3, 'hello': 1} 
Verwandte Themen