質問: {"A": {"b1": 1.0, "c1": 1.5, "d1": 1.9}} #3 ``` という辞書が3つあります。 valueが1つ(例えば、`{"A": {"a1": 0.5}}`)なら、if文の中でAの処理をし、 valueが2つ以上(例えば、`{"A": {"e1": 1.6, "f1": 2.0}}`・`{"A": {"b1": 1.0, "c1": 1.5, "d1": 1.9}}`)なら、if文の中でBの処理をする、という流れにしたいです。 ``` if len(df.values()) != 1: B(df) else: A(df) ``` とコードを書いたのですが、#1の辞書も#2・#3の辞書もどちらもdf.values()が1であると判定されてしまいます。 どのように判定できますか?
回答: **全て1だと判定される原因** 全てのvalues()は、以下のように取得されてしまいます。 ``` df = {"A": {"b1": 1.0, "c1": 1.5, "d1": 1.9}} df.values() >dict_values([{'b1': 1.0, 'c1': 1.5, 'd1': 1.9}]) len(df.values()) >1 ``` 結局、全部長さが1だからです。 なぜ、この長さが全部1かというと、dfの値が一つのディクショナリだと判定されるからです。 **仮定 もし値をもう一つ増やすと** ``` df = {"A": {"b1": 1.0, "c1": 1.5, "d1": 1.9},"B":{"b1": 1.0, "c1": 1.5, "d1": 1.9}} In [19]:len(df.values()) Out[19]: 2 ``` この場合は、2つのディクショナリがあるので、2とカウントされます。 pypyさんの書いた`df = {"A": {"b1": 1.0, "c1": 1.5, "d1": 1.9}}`だと、 `df`の中には、一つのディクショナリしかないからです。`df`には"A"というキーが入っており、その値として、 {"b1": 1.0, "c1": 1.5, "d1": 1.9}が入れられているんだけれども、df.values()の長さを調べようとすると、{"b1": 1.0, "c1": 1.5, "d1": 1.9}というdict型の値が一つ入っているとカウントされています。 なので、`{"b1": 1.0, "c1": 1.5, "d1": 1.9}`の長さを調べたいというのであれば、`df.values()`の長さではなく、`"A"`というキーで指定された値の長さを調べなくてはなりません。 おそらく、されようとしているのはそうしたことでしょうから、`key`を指定してあげるといいです。 ``` In [10]:df["A"] Out[10]: {'b1': 1.0, 'c1': 1.5, 'd1': 1.9} In [10]:len(df["A"]) Out[11]: 3 ``` **提案** よって、 ``` if len(df["A"]) != 1: B(df) else: A(df) ``` がいいんじゃないでしょうか。