カウンターはmain_dict = Counter()
となり、値はmain_dict[word] += 1
となります。最後に、私は周波数が15未満のすべての要素を削除したいと思います。これを行うには、Counters
には何らかの機能がありますか?カウンターでカウントがしきい値未満のオブジェクトを削除します。
助けてください。
カウンターはmain_dict = Counter()
となり、値はmain_dict[word] += 1
となります。最後に、私は周波数が15未満のすべての要素を削除したいと思います。これを行うには、Counters
には何らかの機能がありますか?カウンターでカウントがしきい値未満のオブジェクトを削除します。
助けてください。
いいえ、手動で削除する必要があります。
from itertools import dropwhile
for key, count in dropwhile(lambda key_count: key_count[1] >= 15, main_dict.most_common()):
del main_dict[key]
デモンストレーション:itertools.dropwhile()
を使用すると、その少し簡単に、おそらくになり、あなただけカウントが15以上であるためにキーをテストする必要がありdropwhile
を使用することにより
>>> main_dict
Counter({'baz': 20, 'bar': 15, 'foo': 10})
>>> for key, count in dropwhile(lambda key_count: key_count[1] >= 15, main_dict.most_common()):
... del main_dict[key]
...
>>> main_dict
Counter({'baz': 20, 'bar': 15})
を。その後、テストを控え、すべてを通過するだけです。それはソートされたmost_common()
リストでうまくいきます。 15よりも多くの値があると、それらのテストの実行時間が節約されます。
別の方法:
c = Counter({'baz': 20, 'bar': 15, 'foo': 10})
print Counter(el for el in c.elements() if c[el] >= 15)
# Counter({'baz': 20, 'bar': 15})
>>> main_dict = Counter({'apple': 20, 'orange': 14, 'mango': 26, 'banana': 12})
>>> for k in list(main_dict):
if main_dict[k] < 15:
del main_dict[k]
>>> main_dict
Counter({'mango': 26, 'apple': 20})
が、私は別のソリューション
from collections import Counter
main_dict = Counter({'baz': 20, 'bar': 15, 'foo': 10})
trsh = 15
main_dict = Counter(dict(filter(lambda x: x[1] >= trsh, main_dict.items())))
print(main_dict)
>>> Counter({'baz': 20, 'bar': 15})
を提案することができる。また、私は同じ問題を抱えているが、私は値でカウンターからすべてのキーのリストを返す必要がありますいくつかの閾値以上。この
keys_list = map(lambda x: x[0], filter(lambda x: x[1] >= trsh, main_dict.items()))
print(keys_list)
>>> ['baz', 'bar']
を行うには、私は、その周波数が15以上であるので、この場合 – jamylak
ため 'dropwhile'のポイントはまた' 'bar''が実はこのアイデアはで動作する可能性があり、削除すべきではありませんが表示されません別の方法ですが、本当にキーを削除することはできません。例えば。 'new_dict = dict(takewhile(lambda x:x [1]> = 15、main_dict.most_common()))' – jamylak
@jamylak: 'dropwhile'はマッチを止めるとテストを中止します。違いを生む多数のキーのために。後でこのエラーを調査します。 –