・お題:諸般の事情で、辞書型のvalueから対応するkeyをとって来る必要が出てきた。やってみたい。
・きっともっとエレガントなやり方があると思うが、私なりに考えてみた。
・とりあえず、辞書を作成する。
Dic1={"A":"a",
"B":"b",
"C":"c",
"D":"c"}
・ここから、valueが"c"のキーをリストとしてとってきたい。最終的な出力は["C","D"]になってほしい。
・とりあえず、keyとvalueは以下で取得できるっぽい。list()でリスト化して使おうと思う。
Dic1.keys()
dict_keys(['A', 'B', 'C', 'D'])
Dic1.values()
dict_values(['a', 'b', 'c', 'c'])
・方針としては、valueを検索して、条件に合ったindexのkeyを返せば良さそう。例えば以下のような感じ。targetを変更すれば、他のvalueに対応するkeyを釣ってこれる。
target="c"
Lis1=[list(Dic1.keys())[n] for n in range(len(Dic1)) if list(Dic1.values())[n]==target]
・これで以下が返ってくる。一応目的の処理はできた。
['C', 'D']
・次に、valueが数値だった場合を考える。
Dic2={"A":0,
"B":1,
"C":1,
"D":2}
target=1
Lis2=[list(Dic2.keys())[n] for n in range(len(Dic2)) if list(Dic2.values())[n]==target]
・これでLis2は['B', 'C']になる。targetよりもvalueが大きいkeyを引っ張ってきたいなら、boolを返すところを>にすれば良い。
Lis2=[list(Dic2.keys())[n] for n in range(len(Dic2)) if list(Dic2.values())[n]>target]
・これで、Lis2は['D']になった。
・次に、辞書のリストから特定のkeyのvalueを基準に辞書を引っ張ってくることを考える。とりあえず、辞書のリストを作成する。
Dic3=[{"A":"a","B":"0"},
{"A":"aa","B":"1"},
{"A":"aaa","B":"1"},
{"A":"aaaa","B":"2"}]
・例えば、各辞書の"B"を確認し、そのvalueが2未満の辞書をとって来るなら、以下のような感じ。
Lis3=[d for d in Dic3 if d.get("B")<2]
・Lis3は以下になる。
[{'A': 'a', 'B': 0}, {'A': 'aa', 'B': 1}, {'A': 'aaa', 'B': 1}]
・いちおう目的の処理はできたっぽい。
おわり。