实现结果输出的最佳pythonic方式

Sag*_*gar 5 python dictionary list

我需要一些关于我的答案的最佳和良好解决方案的帮助.

我输入这样的字典:

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},
 }
Run Code Online (Sandbox Code Playgroud)

我想输出像这样:

{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}}} 
Run Code Online (Sandbox Code Playgroud)

我已经完成了以下代码

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

我已经在上面回答了我想要的输出,这是好方法吗?有没有更好的解决方案来实现结果(以pythonic方式),必须是最佳的.

cLu*_*pus 1

一种方法是使用字典理解,如PEP 274中所述,这可能更Pythonic。然而,这个简单的解决方案result = {a: {b: c} for (a, b), c in a.items()}并不能按预期工作。(它会给你一本带有三个键的字典,每个键包含一个字典)。

字典理解中可能存在一些技巧,可以实现所需的行为,但代码似乎不会变得非常可读或易于理解,从而使其变得非常不Pythonic

简而言之,您自己的解决方案将非常Pythonic。