2017-06-10 54 views
5

我需要一些關於最佳和最佳解決方案的幫助。實現結果輸出的最佳pythonic方法

我輸入字典是這樣的:

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}, 
} 

我想輸出是這樣的:

{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}}} 

我在下面

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

完成代碼我已經上面的回答來實現我期望的輸出,這是好的方法嗎? 有沒有更好的解決方案來實現結果(pythonic方式),必須是最優的。

+0

對我很好。 – Ding

+0

沒有比這更好的解決方案嗎? @Di – Sagar

+0

也許別人會有更好的方法,但我會以同樣的方式完成它,這很容易閱讀。 – Ding

回答

0

一種方法是使用dict理解,如PEP 274中所述,這可能是pythonic。 但是,天真的解決方案result = {a: {b: c} for (a, b), c in a.items()}不按要求工作。 (它會給你一個帶有三個密鑰的詞典,每個包含一個字典)。

在詞典理解中可能會有一些技巧會允許所需的行爲,但它似乎代碼不會變得非常可讀或可以理解,從而使其非常易於編輯unpythonic

總之,你自己的解決方案將是pythonic。