2015-01-20 2 views
-1

У меня возникли проблемы с возможностью присвоить несколько значений одной клавише в словаре. До сих пор я пробовал несколько методов, и самый близкий, с которым я работал, был этим.Как добавить несколько значений к ключу в словаре?

from collections import OrderedDict 
from io import StringIO 
f = open('ClassA.txt', 'r') 
dictionary = {} 
for line in f: 
    firstpart, secondpart = line.strip().split(':') 
    dictionary[firstpart.strip()] = secondpart.strip() 
f.close() 
sorted_dict = OrderedDict(sorted(dictionary.items())) 
print(sorted_dict) 
for key, data in dictionary: 
# If this is a new key, create a list to store 
# the values 
    if not key in mydict: 
     dictionary[key] = [] 

В основном ClassA.txt файл содержит имя людей и их оценку, например:

Dan Scored: 10 
Jake Scored: 9 
Harry Scored: 5 
Berlin Scored: 7 

И я использую ordereddic для сортировки ключей (имена) в алфавитном порядке.

И проблема, которую я пытаюсь решить, пытается заставить одного и того же пользователя использовать одно и то же имя или ключ, чтобы хранить множественные баллы, поэтому, когда он снова выполнит викторину, его баллы будут рядом с его именем (ключом).

Так что я пытаюсь добиться этого, когда я распечатать словарь:

OrderedDict([('Berlin Scored', '10', '7', '4'), ('Dan Scored', '10'), ('Harry Scored', '5'), ('Jake Scored', '9') 

Предпочтительно печать нескольких баллов от самого высокого до самого низкого, как это будет моя следующая задача, так что я был бы признателен за любую помощь :)

проблема я столкнулся с моим способом сделать это было:

for key, data in dictionary: 
ValueError: too many values to unpack (expected 2) 
+1

Я хотел бы использовать defaultdict и сортирует значения вместо ordereddict – karthikr

+0

использовать defaultdict, очень легко сортировать любой ДИКТ для вывода. –

ответ

1

Здесь при создании словаря вы заменяющий значение для каждого ключа:

for line in f: 
    firstpart, secondpart = line.strip().split(':') 
    dictionary[firstpart.strip()] = secondpart.strip() 

Вы должны иметь какие-то проверки, как:

key = firstpart.strip() 
    val = dictionary.get(key,[]) 
    val.append(secondpart.strip()) 
    dictionary[key] = val 
+0

Где я могу реализовать это в своем коде? Как и мое имя, я начинаю свежими во всем мире новых возможностей. –

+0

Буквально замените первый цикл, как я показал вам. –

+0

Получение атрибута error/val = dictionary.get (key, []). Append (secondpart.strip()) AttributeError: объект «NoneType» не имеет атрибута «append» –

Смежные вопросы