質問

とってリストの言葉を見つけていきたい回数の単語が表示される。

には明らかにすることがで

words = "apple banana apple strawberry banana lemon"
uniques = set(words.split())
freqs = [(item, words.split().count(item)) for item in uniques]
print(freqs)

でもこのコードは良くないので、プログラムのリスク回のセット、第二の時間をカウントの登場です。

もちろん、ただ単に"サムネやエンジン機能のリストの数がないのでPythonic.ではより効率的Pythonicす。

役に立ちましたか?

解決

defaultdict の救助に!

from collections import defaultdict

words = "apple banana apple strawberry banana lemon"

d = defaultdict(int)
for word in words.split():
    d[word] += 1

これはO(N)で実行されます。

他のヒント

Counterモジュールで collectionsクラスには、目的に構築されていますこの種の問題を解決します:

from collections import Counter
words = "apple banana apple strawberry banana lemon"
Counter(words.split())
# Counter({'apple': 2, 'banana': 2, 'strawberry': 1, 'lemon': 1})

標準的なアプローチ:

from collections import defaultdict

words = "apple banana apple strawberry banana lemon"
words = words.split()
result = collections.defaultdict(int)
for word in words:
    result[word] += 1

print result

GROUPBY onelinerます:

from itertools import groupby

words = "apple banana apple strawberry banana lemon"
words = words.split()

result = dict((key, len(list(group))) for key, group in groupby(sorted(words)))
print result
freqs = {}
for word in words:
    freqs[word] = freqs.get(word, 0) + 1 # fetch and increment OR initialize

私はこれが三部作のソリューションとしてではなく、コレクションをインポートせずに同じになりだと思います。またSelinapのソリューションのようなビットが、より読みやすい私見。トーマスWeigelのソリューションにはなく、例外を使用せずにほぼ同じ。

このしかし、コレクションライブラリからdefaultdict()を使用するよりも遅くなる可能性があります。値がフェッチされるので、インクリメントした後、再度割り当て。代わりにだけインクリメント。しかし、+ =内部だけで同じことを行う可能性があります使用します。

あなたは標準辞書のメソッドを使用しない場合、あなたはこれを試すことができます(適切な辞書をインクリメントリストをループキーを。):

>>> from itertools import groupby
>>> myList = words.split() # ['apple', 'banana', 'apple', 'strawberry', 'banana', 'lemon']
>>> [(k, len(list(g))) for k, g in groupby(sorted(myList))]
[('apple', 2), ('banana', 2), ('lemon', 1), ('strawberry', 1)]

これはO(n log n)時間で実行されます。

defaultdictなします:

words = "apple banana apple strawberry banana lemon"
my_count = {}
for word in words.split():
    try: my_count[word] += 1
    except KeyError: my_count[word] = 1

あなただけのカウントを使用することはできません?

words = 'the quick brown fox jumps over the lazy gray dog'
words.count('z')
#output: 1

私はここで、いくつかのスパークの練習で動作するように起こった私の解決策はあります。

tokens = ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog']

print {n: float(tokens.count(n))/float(len(tokens)) for n in tokens}

**上記の#出力**

{'brown': 0.16666666666666666, 'lazy': 0.16666666666666666, 'jumps': 0.16666666666666666, 'fox': 0.16666666666666666, 'dog': 0.16666666666666666, 'quick': 0.16666666666666666}

を使用するには、単一の辞書にリストを変換するには()を減らすます。

words = "apple banana apple strawberry banana lemon"
reduce( lambda d, c: d.update([(c, d.get(c,0)+1)]) or d, words.split(), {})

戻り

{'strawberry': 1, 'lemon': 1, 'apple': 2, 'banana': 2}
words = "apple banana apple strawberry banana lemon"
w=words.split()
e=list(set(w))       
for i in e:
   print(w.count(i))    #Prints frequency of every word in the list

この情報がお役に立てば幸い!

その答え以下をかがサイクルでは別の方法

def func(tup):
    return tup[-1]


def print_words(filename):
    f = open("small.txt",'r')
    whole_content = (f.read()).lower()
    print whole_content
    list_content = whole_content.split()
    dict = {}
    for one_word in list_content:
        dict[one_word] = 0
    for one_word in list_content:
        dict[one_word] += 1
    print dict.items()
    print sorted(dict.items(),key=func)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top