Печать словаря в виде таблицы без модуля импорта - PullRequest
0 голосов
/ 06 марта 2020

У меня есть следующие два словаря:

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


Что я хочу сделать, это распечатать результаты, отформатированные в таблице в консоли.

У меня есть следующий код, так far:

    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")
        )

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Вы можете использовать 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))
1 голос
/ 06 марта 2020
stats_dict = {}
group_stats_dict = {}

print ("            CONGRUENT                      INCONGRUENT")
print ("PARTICIPANT","MEAN","STDDEV","%CORRECT","MEAN","STDDEV","% CORRECT")
for participant,value in stats_dict.items():
  print(
       participant,
       value.get("congruent",{}).get("mean"),
       value.get("congruent",{}).get("stddev"),
       value.get("congruent",{}).get("pecentage_correct"),
       value.get("incongruent",{}).get("mean"),
       value.get("incongruent",{}).get("stddev"),
       value.get("incongruent",{}).get("pecentage_correct")
  )

print(
       "GROUP",
       group_stats_dict.get("congruent",{}).get("mean"),
       group_stats_dict.get("congruent",{}).get("stdev"),
       group_stats_dict.get("congruent",{}).get("true_percentage"),
       group_stats_dict.get("incongruent",{}).get("mean"),
       group_stats_dict.get("incongruent",{}).get("stdev"),
       group_stats_dict.get("incongruent",{}).get("true_percentage")
)

Как предложено в комментариях, используйте textwrap для форматирования пробелов для ответа

0 голосов
/ 06 марта 2020

Этот код даст вам именно то, что вы хотите.

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)

А для второго словаря вам просто понадобится внутренний l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...