Ich habe die folgenden zwei Wörterbücher:

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


Ich möchte die Ergebnisse ausdrucken, die in einer Tabelle in der Konsole formatiert sind.

Ich habe bisher folgenden Code:

    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)

Ich möchte, dass die Ausgabe in der Konsole so aussieht (wobei group das gedruckte group_stats-Wörterbuch ist):

            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

Ich habe Schwierigkeiten, die Daten unter den richtigen Überschriften zu positionieren. Meine Ausgabe ist im Moment wie folgt:

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

Alle Hilfe sehr geschätzt. Lassen Sie mich wissen, wenn Sie Fragen haben oder etwas zu meiner Frage hinzufügen muss.

Kann ich Daten auch auf 3 Dezimalstellen formatieren?

    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")
        )
0
wax_boi 6 März 2020 im 13:09

3 Antworten

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

Verwenden Sie, wie in den Kommentaren vorgeschlagen, Textumbruch, um Leerzeichen für die Antwort zu formatieren

1
Pavan Kumar T S 6 März 2020 im 10:25

Dieser Code gibt Ihnen genau das, was Sie wollen.

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)

Und für das zweite Wörterbuch benötigen Sie nur die innere Schleife.

0
ib4real 6 März 2020 im 12:03

Sie können str.format verwenden, um Ihre Zeilen zu formatieren:

...
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
Serge Ballesta 6 März 2020 im 10:47