LoginSignup
0
1

Python 多次元Dictionaryのキー、値の存在確認と値取得をする話。

Last updated at Posted at 2023-11-11

Exifや動画のプロパティをいじっていると、多次元Dictでキーチェックや値チェックをする必要が出てくる。
RubyやJavascriptのようにdigが使えれば安全にハッシュ検索ができるが、調べた範囲で多次元Dictのキーチェック、値取得を簡単にやる方法が見つからなかったので自分で書いた。
たぶん車輪の再発明。自宅で書いたものを会社で参照するための備忘録でしかない。
こんなバカなことやらなくてもこれでできるよ!とかここをこうすると早くなるよ!とか教えてくださるとありがたいです。

スクリプト

def check_key_multilevel_dict(var,*args):
    if len(args) == 1 and isinstance(args[0],list):
        args = args[0]
    if isinstance(var, dict) and len(args) > 0:
        for arg in args:
            if arg in var:
                var = var[arg]
            else:
                return False
        return True

def get_value_multilevel_dict(var,*args):
    if len(args) == 1 and isinstance(args[0],list):
        args = args[0]
    if isinstance(var, dict) and len(args) > 0:
        for arg in args:
            if arg in var:
                var = var[arg]
            else:
                return False
        return var

使い方

呼び出しは第一引数がDict、第二引数以降がキー名。
キー名は第二引数に配列で与えても第二引数以降に複数記載でもOK。

target_dict = 
{
    'format': 
    {
        'filename': '/share/public1/photo/2022/2022-04-08/20220408051255.MOV', 
        'format_name': 'mov,mp4,m4a,3gp,3g2,mj2', 
        'format_long_name': 'QuickTime / MOV', 
        'tags': {
            'creation_time': '2022-04-08T05:12:55.000000Z', 
            'com.apple.quicktime.creationdate': '2022-04-08T14:12:54+0900'
        }
    }
}

上記のようなdictがあった場合に

print(check_key_multilevel_dict(target_dict,['format','tags','creation_time']))
-> True
print(get_value_multilevel_dict(target_dict,['format','tags','creation_time']))
-> '2022-04-08T05:12:55.000000Z'
print(check_key_multilevel_dict(target_dict,['format2','tags2','creation_time2']))
-> False
print(get_value_multilevel_dict(target_dict,['format2','tags2','creation_time2']))
-> False

を返す。

check_key_multilevel_dict はキーの存在チェックだけなのでTrue/Falseで回答。
get_value_multilevel_dict は値をとるので該当キーが存在すれば値を回答する。

0
1
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
1