nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Python データ構造学習

リストを使って記載してみる

def names(name_and_grouplist, group_name):
    _names = []

    for name_and_group in name_and_group_list:
        if name_and_group[0] == group_name:
            name = name_and_group[1]
            if name not in _names:
                _names.append(name)

    return _names

name_and_group_list = [
    ["Aグループ", "Tom"],
    ["Aグループ", "Jerry"],
    ["Bグループ", "Mike"],
    ["Bグループ", "Ichiro"],
    ["Bグループ", "Mike"],
]

result_list = names(name_and_group_list, "Bグループ")

print(result_list)
['Mike', 'Ichiro']

辞書を使って記載してみる

def get_name_and_group(name_and_group_list):

    # 辞書宣言
    _names_by_group = {}

    print(type(_names_by_group))

    for name_and_group in name_and_group_list:
        
        group = name_and_group[0]
        name = name_and_group[1]

        print(type(group))
        print(type(name))

        if group not in _names_by_group:
             _names_by_group[group] = []

        if name not in _names_by_group:
            _names_by_group[group].append(name)

    return _names_by_group


name_and_group_list = [
    ["A", "Tom"],
    ["A", "Jerry"],
    ["B", "Mike"],
    ["B", "Ichiro"],
    ["B", "Mike"],
]

print(type(name_and_group_list))

result_list = get_name_and_group(name_and_group_list)

print(result_list["B"])
['Mike', 'Ichiro', 'Mike']

defaultdictを使用して、辞書を改善 (listで初期化)

from collections import defaultdict

def get_names_by_group(someList):
    _names_by_group = defaultdict(list)
    
    for item in someList:
        group = item[0]
        name = item[1]
        
        if name not in _names_by_group[group]:
            _names_by_group[group].append(name)
    
    return _names_by_group



name_and_group_list = [
    ["A", "Tom"],
    ["A", "Jerry"],
    ["B", "Mike"],
    ["B", "Ichiro"],
    ["B", "Mike"],
]


result_list = get_names_by_group(name_and_group_list)

print(result_list["B"])
['Mike', 'Ichiro']

defaultdictを使用してみる

defaultdictは標準ライブラリのcollectionsモジュールに含まれるデータ型です。 辞書に存在しないキーにアクセスしたとき、デフォルト値が設定されたキーを自動で作ってくれるのがメリットです。 defaultdict の引数には、「初期化時に実行する関数」を記述します。

defaultdictを使用して、辞書を改善 (setで初期化)

from collections import defaultdict

def get_names_by_group(someList):
    
    _names_by_group = defaultdict(set)
    
    for group, name in someList:
        _names_by_group[group].add(name)
    
    return _names_by_group



name_and_group_list = [
    ["A", "Tom"],
    ["A", "Jerry"],
    ["B", "Mike"],
    ["B", "Ichiro"],
    ["B", "Mike"],
]


result_list = get_names_by_group(name_and_group_list)

print(result_list["B"])
{'Mike', 'Ichiro'}

リンク