ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: collections リスト内で各要素の数を集計して辞書にする

備忘録です。

リスト内で重複した要素が何個ずつあるのか数え、それをもとに色々処理する。という状況があったのでその方法。

 

collectionsのCounter(辞書のサブクラス)

こちらを使用すると、例えば、

data = [10, 9, 10, 10, 9, 8]

このようなリストが

Counter({10: 3, 9: 2, 8: 1})

こんな感じで集計できます。

 

集計したものをもとに元のリストを重複しないものだけにしたり、重複したものだけにしたりして編集をかけることができます。

 

今回は、重複したものだけにするというタスクの元でこちらを使用。

 

import collections

data = [10, 9, 10, 10, 9, 8]

d = collections.Counter(data)

# 上で求めた辞書からタプルでキーと値を取り出して値が1のもののキーみリストに
unq_list = [tup[0] for tup in d.items() if tup[1] == 1]

# 重複していないものを元のデータから削除
for unq in unq_list:
    data.remove(unq)

print(data)

# --> [10, 9, 10, 10, 9]

ちなみに、collectionsを使用しなくても下記で同じことができるなんて!!(1行!!)

 

print([x for x in data if data.count(x) > 1])

# --> [10, 9, 10, 10, 9]