2016-02-01 9 views
6

Questi sono 3 dts che ho creato ciascuno con le 4 stesse chiavi ma, naturalmente, valori diversi.Fare un ciclo attraverso un elenco che contiene dicts e visualizzarlo in un certo modo

lloyd = { 
    "name": "Lloyd", 
    "homework": [90.0, 97.0, 75.0, 92.0], 
    "quizzes": [88.0, 40.0, 94.0], 
    "tests": [75.0, 90.0] 
} 
alice = { 
    "name": "Alice", 
    "homework": [100.0, 92.0, 98.0, 100.0], 
    "quizzes": [82.0, 83.0, 91.0], 
    "tests": [89.0, 97.0] 
} 
tyler = { 
    "name": "Tyler", 
    "homework": [0.0, 87.0, 75.0, 22.0], 
    "quizzes": [0.0, 75.0, 78.0], 
    "tests": [100.0, 100.0] 
} 

Ho memorizzato le carte in una lista.

students = [lloyd, alice, tyler] 

Quello che mi piacerebbe fare è scorrere l'elenco e visualizzare ogni modo:

""" 
student's Name: val 
student's Homework: val 
student's Quizzes: val 
student's Tests: val 
""" 

Stavo pensando un ciclo for sarebbe fare il trucco for student in students: e ho potuto memorizzare ogni in un vuoto dict current = {} ma dopo questo è dove mi perdo. Stavo per usare getitem ma non pensavo che avrebbe funzionato.

Grazie in anticipo

+2

Questi dizionari sono fondamentalmente una classe da poveri. Se hai familiarità con le classi di Python e la programmazione orientata agli oggetti, potresti creare una classe 'Student' con un metodo' transcript' (o semplicemente sovrascrivere il metodo magico '__str__'). Dovresti quindi stampare 'student.transcript()' o 'str (studente)' in a 'per studente negli studenti:' loop. (Se la prossima funzione o programma che gestirà tali dati si aspetta comunque un 'dict', lascia i dati in un' dict'.) –

+1

ChrisSlightGhost do keys l'ordine di stampa è importante per te? –

risposta

15

si può fare questo:

students = [lloyd, alice, tyler] 

def print_student(student): 
    print(""" 
     Student's name: {name} 
     Student's homework: {homework} 
     Student's quizzes: {quizzes} 
     Student's tests: {tests} 
    """.format(**student)) # unpack the dictionary 

for std in students: 
    print_student(std) 
+1

Grazie germoglio, lo apprezzo davvero. – ChrisSlightGhost

5

Usa ciclo di seguito per visualizzare tutti i dati degli studenti senza hardcoding chiavi:

# ... 
# Defining of lloyd, alice, tyler 
# ... 

students = [lloyd, alice, tyler] 
for student in students: 
    for key, value in student.items(): 
     print("Student's {}: {}".format(key, value)) 

buona fortuna!

+2

Due punti: primo, 'iteritems' non esiste più in Python moderno, ma' items' funziona sia in 2 che in 3, quindi potresti anche usarlo. In secondo luogo, mentre non si codifica con hardkey i tasti, questo perde l'ordine di output desiderato perché i dict non sono ordinati; per me, "name" arriva al terzo posto nell'output, il che sembra strano. – DSM

+1

@DSM Grazie per i vostri suggerimenti, è davvero pieno, ho aggiornato 'iteritems' su' items'. –