構造の異なる辞書をソートしたい。
辞書dfには
df = [{"A":{"A1":{"a1":100,"b1":200,"c1":300}}},{"B":{"B1":{"a2":150,"b2":250,"c2":350}}},{"C":{"test1":10,"test2":190,"test3":120}},{"D":{"test01":170,"test02":150,"test03":180}}]
という風に
{‘A’:{‘A1’:{‘a1’:100,’b1’:200,’c1’:300}}}
という形の辞書と
{’C’:{‘test1’:10,’test2’:80,’test3’:120}}
という形の辞書が含まれている。
これらのdfの子辞書のvalue(100・200・10など)を小さいもの順に並べたい。
理想のアプトプットは、
C→
test1:10
A⇨A1→
a1:100
B⇨B1→
a2:150
のように並び変える事である。
もしdfの子辞書のvalueでタイがあれば、AとかBとかのkeyが小さいもの順に並び替えたい。
df = [{"A":{"A1":{"a1":100,"b1":200,"c1":300}}},{"B":{"B1":{"a2":150,"b2":250,"c2":350}}},{"C":{"test1":10,"test2":190,"test3":120}},{"D":{"test01":170,"test02":150,"test03":180}}] for i in range(len(df)): for key,value in sorted(df[i].items(), key=lambda x:x[0]): print(str(key)+ "⇨") x = str(key)+ "→" for ky,vl in value.items(): print(str(ky)+ "→") y = str(ky)+ "→" for k, v in sorted([(k, v) for k,v in vl.items() if type(v) is not list], key=lambda x: x[1]): print(str(k) + ": " + str(v))
とコードを書くと、AttributeError: 'numpy.float64' object has no attribute 'items’とネストが深くない要素のようでエラーが出た。
(もしかしたら、AttributeError: 'int' object has no attribute 'items' と出るかも)
エラーの原因はわかるが、僕がやりたいことをどうコードを書けばできるのかがわからない。そもそもプログラムでできるのかもわからない。
どのようにコードを書いて修正すればいいか?
回答2件
あなたの回答
tips
プレビュー