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

时间:2017-06-10 17:13:06

标签: python list dictionary

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

我输入了这样的字典:

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方式),必须是最佳的。

1 个答案:

答案 0 :(得分:1)

一种方法是使用dict理解,如PEP 274中所述,它可能更加pythonic。 但是,天真的解决方案result = {a: {b: c} for (a, b), c in a.items()}无法正常工作。 (它将为您提供一个包含三个键的字典,每个键包含一个字典)。

在dict理解中可能存在一些允许所需行为的技巧,但似乎代码不会变得非常易读或可理解,从而使其非常 unpythonic

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