2017-02-19 2 views
0

У меня есть 3 словаря, которые содержат оценки для студентов hw, quiz и экзаменов, однако мне нужно поместить эти три словаря в супер-словарь со всеми оценками учащихся в них со следующей структурой.Сравнение словарей, а затем их добавление, если это правда?

"123-45-6789": {"hw": [98,89,92,75], "quiz": [45,36,42,50,29,27,40,41], " exam ": [175,157]}

Я пробовал делать словарь по умолчанию со всеми идентификаторами студента в качестве ключей, а затем пустым значением, но я не слишком хорошо разбираюсь в том, как правильно манипулировать словарями, чтобы, если бы ключ был можно найти, чтобы добавить словарь в супер словарь

Вот некоторые из кода у меня есть, что преобразованы 3 тексты файла в 3 dictionaies

def create_dictionary(): 
    fullRoster= dict() 
    idList= [] 
    quizList= [] 
    hwList= [] 
    examList= [] 
    studentids= open("studentids.txt", "r") 
    idList= [line.rstrip()for line in studentids] 
    studentids.close() 
    idList= dict.fromkeys(idList) 
    #hwFile converted into a list and then into a dictionary 
    #the exam and homework files follow the same structure 
    hwFile= open("hwscores.txt", "r") 
    hwList= [line.rstrip().split() for line in hwFile] 
    hwFile.close() 
    #searches for similar ids then places quiz score into single list 
    for i in range (15): 
     for k in range ((len(hwList))): 
      if hwList[i][0]== hwList[k][0] and i!=k: 
       hwList[i].append((hwList[k][1])) 
    hwList= hwList[:15] 
    #adds zero if hw list is not 5 
    for i in range (15): 
     if len(hwList[i])!=5: 
      while len(hwList[i])<5: 
       hwList[i].append(0) 
    #dictionary comprehension to create dictionary 
    hwList= {l[0]: [int(x) for x in l[1:]] for l in hwList} 
+0

Каков формат каждого входного файла? Можете ли вы упомянуть об этом? –

+0

Чтобы проверить, присутствует ли ключ в словаре, вы можете использовать что-то вроде 'if 'student_id' в student_id_dict.keys()'. Если присутствует ключ, вы можете добавить это значение в существующий список, иначе вы можете создать новую пару ключевых значений. –

+0

@RohanSadale файлы являются свалка всех студентов идентификаторами с одного счета рядом с ними, как это: 709-40-8165 168 560-33-3099 176 503-27-1729 194 267-10-7633 142 807-49-0073 82 –

ответ

0
for k in fullRoster: 
    fullRoster[k] = {'hw':hwList[k], 'quiz':quizList[k], 'exam':examList[k]} 

Оказывается, это все, что я должен был сделать, поскольку это для цикла, когда fullRoster является словарем студента в качестве ключей, а значения представляют собой пустой словарь, цикл повторяется путем поиска соответствующего совпадающего идентификатора, а затем добавляет его.

+0

Если вы даете ответ, желательно дать [некоторое объяснение, почему ваш ответ] (http://stackoverflow.com/help/how-to-answer). –