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
は値をとるので該当キーが存在すれば値を回答する。