カオスな題名ですが、やりたいこととしては
ds = {'id001': {'attr1': 'AAA', 'attr2': 'aaa'}, 'id002': {'attr1': 'BBB', 'attr2': 'bbb'}, 'id003': {'attr1': 'AAA', 'attr2': 'ccc'}}
のような辞書があったとき、attr1=AAA
のときに['id001', 'id003']
のようなリストを取得したい。
以下のように辞書をループで回して対応する値を取得するイメージで対応する。
>>> [d for d in ds if ds[d]['attr1'] == 'AAA'] ['id001', 'id003']
辞書ds
は単純にループすると、トップのkeyが取得できます。
>>> for d in ds: ... print(d) ... id001 id002 id003
ネストされた辞書は階層で指定していけば良いので
>>> for d in ds: ... print(ds[d]) ... {'attr2': 'aaa', 'attr1': 'AAA'} {'attr2': 'bbb', 'attr1': 'BBB'} {'attr2': 'ccc', 'attr1': 'AAA'} >>> for d in ds: ... print(ds[d]['attr1']) ... AAA BBB AAA
というようにアクセスすることができます。
目的のvalueまでアクセスすることができたため、あとはifを使って条件を指定してあげることで、対応するkeyのみを出力することができます。
>>> for d in ds: ... if ds[d]['attr1'] == 'AAA': ... print(d) ... id001 id003
ここまでを、リスト内包表記を使えば1行で、リスト型として取得することができます。
>>> [d for d in ds if ds[d]['attr1'] == 'AAA'] ['id001', 'id003'] >>> [d for d in ds if ds[d]['attr2'] == 'aaa'] ['id001']
辞書やJSONは持ち方が便利ですが、いざ取り出す時の操作がすぐ出てこなかったりするので、やりたいことを整理してから検討したいと思います。