2016-02-01 6 views
6

Это 3 dicts, которые я сделал с четырьмя одинаковыми клавишами, но, конечно, разными значениями.Цитирование по списку, содержащему dicts и отображающему его определенным образом.

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

Я сохранил диктоны в списке.

students = [lloyd, alice, tyler] 

То, что я хотел бы сделать, это цикл по списку и отображать каждый так:

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

Я думал для цикла будет делать трюк for student in students: и я мог бы хранить каждый в пустой dict current = {}, но после этого я заблудился. Я собирался использовать getitem, но я не думал, что это сработает.

Заранее спасибо

+2

Эти словари в основном относятся к классу бедного человека. Если вы знакомы с классами Python и объектно-ориентированным программированием, вы можете создать класс 'Student' с методом' transcript' (или просто переопределить магический метод '__str__'). Затем вы просто напечатали 'student.transcript()' или 'str (student)' в классе 'для студентов в студентах:'. (Если следующая функция или программа, которая будет обрабатывать эти данные, ожидает «dict», оставите данные в 'dict'.) –

+1

ChrisSlightGhost сделать заказ на печать для принтеров очень важен для вас? –

ответ

15

Вы можете сделать это:

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

Спасибо, я очень благодарен. – ChrisSlightGhost

5

Использование петли ниже для отображения всех данных студентов без жесткого кодирования ключей:

# ... 
# 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)) 

УДАЧИ!

+2

Два момента: во-первых, 'iteritems' больше не существует в современном Python, но' items' работает как в 2, так и в 3, поэтому вы можете использовать его. Во-вторых, в то время как вы не жестко кодируете ключи, это теряет желаемый порядок вывода, потому что dicts неупорядочен; для меня «имя» занимает третье место на выходе, что кажется странным. – DSM

+1

@DSM Спасибо за ваши предложения, это действительно полезно, я обновил 'iteritems' до' items'. –