2017-06-10 16 views
5

私の答えに最適で良い解決策についての助けが必要です。私はこのような出力をしたい結果の出力を達成する最適なピジョンソニック方法

a = { 
(1, 1403): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1412): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1411): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1402): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1411): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1501): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1511): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1700): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1120): {1:0.1, 2:0.1, 3:0.2}, 
(2, 2133): {1:0.1, 2:0.1, 3:0.2}, 
(2, 2130): {1:0.1, 2:0.1, 3:0.2}, 
(2, 901): {1:0.1, 2:0.1, 3:0.2}, 
(3, 1111): {1:0.1, 2:0.1, 3:0.2}, 
} 

::私は

data_dict = defaultdict(dict) 
for (a,b), c in a.items(): 
    data_dict[a].update({b:c}) 

下のコードを行っている

{1: { 1403: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1402: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1411: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1412: {1: 0.1, 2: 0.1, 3: 0.2}}, 

2: {1120: {1: 0.1, 2: 0.1, 3: 0.2}, 
    2130: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1700: {1: 0.1, 2: 0.1, 3: 0.2}, 
    901: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1511: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1501: {1: 0.1, 2: 0.1, 3: 0.2}, 
    2133: {1: 0.1, 2: 0.1, 3: 0.2}}, 
3: {1111: {1: 0.1, 2: 0.1, 3: 0.2}}} 

私はすでに達成するための答えの上に持っていた

私はこのような入力辞書を持っています私の望ましい出力、それは良いアプローチですか? 結果を達成するためのよりよい解決法がありますか(Pythonの方法で)、最適でなければなりません。

+0

私によく見えます。 – Ding

+0

これ以上の解決策はありませんか? @Di – Sagar

+0

他の誰かがより良いアプローチをしてくれるかもしれませんが、私はそれを同じ方法でやったでしょう。読みやすいです。 – Ding

答えて

0

PEP 274に記載されているように、1つの方法はdictの理解を使用することです。 ただし、ナイーブな解決策result = {a: {b: c} for (a, b), c in a.items()}は必要に応じて機能しません。 (これは、それぞれが辞書を含む3つのキーを持つ辞書を提供します)。

は、希望の動作を可能にするdictの理解では、いくつかの策略があるかもしれませんが、このように、それは非常にunpythonicをレンダリング、コードは非常に読みやすい、あるいは理解できにならないだろうと思われます。

要するに、あなた自身の解決策は非常に難しいでしょう。

関連する問題