collections.Counter(), defaultdict()


collections.Counter()


  • コンテナ内のデータの個数を計算する場合はcollectionsモジュールのカウンタを使用します.

  • 要素はdickshernerykeyとして格納され、個数はdicksherneryvalueとして格納されます.

  • これはディック・シャナリー資料型です.
  • ✔タイプはDictionary資料型です.
    tmp = ['kim', 'park', 'choi', 'kim', 'kim', 'kim', 'choi', 'park', 'choi']
    ex = collections.Counter(tmp)
    print(ex)

    ✔ .keys() & .values()
    print(ex.keys()) 
    print(ex.values())

    ✔ .items()
    import collections
    tmp = "ABCDEEEEEFFFGG"
    ex = collections.Counter(tmp)
    for key, value in ex.items():
        print(key, '가', value, '개 있음')

    ✔と交差(&)を計算できます.
    import collections
    
    ex1 = collections.Counter('ABCDEFGGGGG')
    ex2 = collections.Counter('ABCDEFG')
    
    print(ex1 & ex2)
    print(ex1 | ex2)

    検索に✔がないキーは0を出力します.
    import collections
    a = 'aaabcc'
    sh = collections.Counter(a)
    sh['a'] -= 1
    print(sh['a'])  # 2 출력
    print(sh['x'])  # 0 출력

    collections.defaultdict()


  • 存在しない鍵をディクシャナで問い合わせるとKeyError異常が発生します.

  • ただしdefaultdictは、存在しない鍵をクエリーする際にエラーが発生せず、設定されたエラー値に基づいてその鍵にアイテムを追加します.

  • パラメータをint、list、setなどと指定できます.

  • これはディック・シャナリー資料型です.
  • defaultdictの最初のパラメータは、default factoryを指定します.(既定値を5に設定)
    from collections import defaultdict
    
    def default_factory():
        return 5
    
    tmp = defaultdict(default_factory)
    tmp['아이유'] = 10
    tmp['카리나'] = 2
    
    print(tmp)
    print(tmp['손예진'])
    print(tmp)

    ✔デフォルト値を0に設定したい場合は、intをdefault factoryに渡すことができます.
    from collections import defaultdict
    
    tmp = defaultdict(int)
    tmp['명수'] = 10
    tmp['재석'] = 2
    
    print(tmp)
    print(tmp['호동'])
    print(tmp

    ✔パラメータ値リストの場合
    import collections
    
    aaa = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    tmp = collections.defaultdict(list)
    
    for key, value in aaa:       
        tmp[key].append(value) 
    
    print(tmp)

    ✔文字列数
    import collections
    
    aaa = 'aaabbcccccdeee'
    sH = collections.defaultdict(int)
    for x in aaa:
        sH[x] += 1
    
    for kk in sH.keys(): 
        print(kk)
    print('---')
    
    for jj in sH.values():
        print(jj)
    print('---')
    
    for key, value in sH.items():
        print(key, '는', value, '개 입니다.')