1

昨日、私は、一意でないアイテムのリストを取得し、リスト内のアイテムの一意のバージョンがそれぞれの出現回数にマップされた辞書を作成するという問題に取り組んでいました。これは非常に簡単に聞こえます。私はすぐに辞書の内包表記を書き始めましたが、実行しているキーが一意ではなく、値が加算される必要があるため、終了する方法がわからないことに気付きました。 . それでも、これには洗練された辞書の理解が必要なように感じます。アイデア?

私が欲しいのは、次のことを行う理解です:

#given
lst = [1,1,1,7,5,8,3,8,5,9,1]
#do
a_dict = defaultdict(int)
for item in lst:
    a_dict[item] +=1
4

1 に答える 1

3

The Counter class in the collections module looks like it may do what you want.

You can do something like this:

from collections import Counter
a_dict = Counter(lst)

Versions of Python older than 2.7 do not have the Counter class, but you may be able to do something like this:

a_dict = dict((x, lst.count(x)) for x in set(lst))

The set conversion is not necessary. It may make the code run faster for large lists with many identical items but I don't know for sure because I haven't benchmarked it.

于 2012-05-25T17:46:36.030 に答える