0
0

DB取得データとキーが一致する処理データの値を比較して処理する方法【Python】

Posted at

説明

処理の流れ

  1. db_data から idcode をキーにした辞書 db_dict を作成します。
  2. chk_data の各エントリの idcode を組み合わせて、db_dict のキーとして使用します。
    一致するDBデータがあればdb_matchに格納され、なければNoneになります。
  3. db_match が存在する場合、chk['pos'](処理データの位置)とdb_match['pos'] (DBデータの位置)を比較して、対応するメッセージを返します。
# 処理データ
chk_data = [
    { 'id': 1, 'code': 'A10', 'pos': 52 },
    { 'id': 3, 'code': 'A30', 'pos': 52 },
    { 'id': 4, 'code': 'A40', 'pos': 52 },
    { 'id': 5, 'code': 'A50', 'pos': 52 },
]

# DBデータ
db_data = [
    { 'id': 1, 'code': 'A10', 'pos': 51, 'sort': 101 },
    { 'id': 2, 'code': 'A20', 'pos': 52, 'sort': 102 },
    { 'id': 3, 'code': 'A30', 'pos': 53, 'sort': 103 },
]

# (id, code)をキーとした辞書に格納
db_dict = {(db['id'], db['code']): db for db in db_data}

# 処理データのキー(id, code)と一致するDBデータを取得し、posを比較
for chk in chk_data:

    key = (chk['id'], chk['code'])  # 辞書のキーとなるタプル
    db_match = db_dict.get(key)  # 辞書からデータを取得

    if db_match:
        # posの比較
        if chk['pos'] > db_match['pos']:
            print(f"ID: {chk['id']}, Code: {chk['code']} - OVER")
        else:
            print(f"ID: {chk['id']}, Code: {chk['code']} - OK")
    else:
        print(f"ID: {chk['id']}, Code: {chk['code']} - DBデータが見つかりません")

# ID: 1, Code: A10 - OVER
# ID: 3, Code: A30 - OK
# ID: 4, Code: A40 - DBデータが見つかりません
# ID: 5, Code: A50 - DBデータが見つかりません
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0