首页 > 解决方案 > 将字典打印为表格而不导入模块

问题描述

我有以下两个字典:

stats_dict = {
  "PO1": {
    "congruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    },
    "incongruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    }
  },
  "PO2": {
    "congruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    },
    "incongruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    }
  },
  "PO3": {
    "congruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    },
    "incongruent": {
      "mean": 0.6205138,
      "stdev": 0.07207165926839758,
      "true_percentage": 0.8333333333333334
    }
  }
}

group_stats_dict = {
     "congruent": {
              "mean": 0.68699328,
              "stddev": 0.98465454,
              "pecentage_correct": 0.98
           },
     "incongruent": {
              "mean": 0.78699328,
              "stddev": 0.99465454,
              "pecentage_correct": 0.98
           }
}


我要做的是在控制台中以表格格式打印结果。

到目前为止,我有以下代码:

    stats_dict = {}
    group_stats_dict = {}

    print ("            CONGRUENT                      INCONGRUENT")
    print ("PARTICIPANT MEAN     STDDEV   %CORRECT     MEAN    STDDEV    % CORRECT")
    for d in stats_dict.keys():
        print(d)
        for m in stats_dict[k]:
            print(m)

我希望输出在控制台中看起来像这样(其中 group 是打印的 group_stats 字典。):

            CONGRUENT                           INCONGRUENT
PARTICIPANT MEAN        STDDEV      % CORRECT   MEAN        STDDEV      % CORRECT   
P01         0.620       0.072       0.83        0.620       0.072       0.83
P02         0.620       0.072       0.83        0.620       0.072       0.83
GROUP       0.686       0.984       0.98        0.786       0.994       0.98

我很难将数据定位在正确的标题下,目前我的输出如下所示:

            CONGRUENT                      INCONGRUENT
PARTICIPANT MEAN     STDDEV   %CORRECT     MEAN    STDDEV    % CORRECT
P01
congruent
incongruent
P02
congruent
incongruent
P03
congruent
incongruent
P04
congruent
incongruent
P05

非常感谢所有帮助。如果您有任何问题或需要添加到我的问题中,请告诉我。

我可以将数据格式化为小数点后 3 位吗?

    for participant,value in stats_dict.items():
        print(
            participant,
            value.get("congruent","{:.3f}").get("mean"),
            value.get("congruent","{:.3f}").get("stdev"),
            value.get("congruent",{}).get("percentage_correct"),
            value.get("incongruent",{}).get("mean"),
            value.get("incongruent",{}).get("stdev"),
            value.get("incongruent",{}).get("percentage_correct")
        )

标签: pythondictionaryprinting

解决方案


您可以使用str.format来格式化您的行:

...
print ('{:<12}{:<9}{:<9}{:<13}{:<8}{:<10}{}'.format("PARTICIPANT", "MEAN", "STDDEV", "%CORRECT", "MEAN", "STDDEV", "% CORRECT")
for d in stats_dict.keys():
    line = [d]
    for i in 'congruent', 'incongruent':
        for j in ('mean', 'stdev', 'true_percentage'):
            line.append(stats_dict[d][i][j])
    print('{:<12}{:<9.3}{:<9.3}{:<13.2}{:<8.3}{:<10.3}{<13.2}'.format(*line))

推荐阅读