Python 将字典打印为表而不导入模块

Python 将字典打印为表而不导入模块,python,dictionary,printing,Python,Dictionary,Printing,我有以下两本字典: stats_dict = { "PO1": { "congruent": { "mean": 0.6205138, "stdev": 0.07207165926839758, "true_percentage": 0.8333333333333334 }, "incongruent": { "mean": 0.6205138, "stdev": 0.07207165926839758,

我有以下两本字典:

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 dictionary):

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

            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")
        )
正如在评论中所建议的,使用文本换行来设置答案的空格格式


正如评论中所建议的,使用文本换行设置答案空格的格式

您可以使用
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))
。。。

打印(“{:您可以使用
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))
。。。

print(“{:此代码将为您提供所需的内容

for d in stats_dict:
value = stats_dict[d]
s = d
    for element in value:
        val = value[element]
        s+=' '*9+"{0:.2f}".format(val['mean'])+' '*5+"{0:.2f}".format(val['stdev'])+' '*5+"{0:.2f}".format(val['true_percentage'])
    print(s)

对于第二个字典,您只需要内部循环。

此代码将为您提供所需的内容

for d in stats_dict:
value = stats_dict[d]
s = d
    for element in value:
        val = value[element]
        s+=' '*9+"{0:.2f}".format(val['mean'])+' '*5+"{0:.2f}".format(val['stdev'])+' '*5+"{0:.2f}".format(val['true_percentage'])
    print(s)

对于第二个字典,您只需要内部循环。

尝试python的textwrap来填充空格尝试python的textwrap来填充空格您也可以尝试texttable,这非常感谢!我希望能够将数据格式化为3位小数。我可以做类似于上面的事情吗?看看我在问题底部添加了什么onno你应该喜欢“{0:.3f}”。format(value.get(“Congrent”,“{}”)。get(“mean”))你也可以试试texttable,太好了,谢谢!我希望能够将数据格式化为3位小数。我可以做类似上面的事情吗?看看我在问题底部添加的内容不,你应该喜欢“{0:.3f}”。format(value.get(“Congrent”,“Congrent”,“{}”).get(“mean”))