2013-03-16 6 views
2

Я в процессе написания программы для команды робототехники. Я не вправе собирать данные во время соревнований, чтобы найти лучшую команду для «альянса». Он должен собирать около 20 значений и должен иметь возможность перечислить данные по различным параметрам. У меня много каркаса, но похоже, что когда я добавляю свои данные в список, он будет изменять все записи до добавления.Добавление дикта в список

Например, если у меня есть

data = [{"teamNumber":1345,"teamName":"Blah"}] 

и попытаться добавить

{"teamNumber":3219,"teamName":"TREAD"} 

к данным с помощью добавления() я в конечном итоге с

data = [{"teamNumber":3219,"teamName":"TREAD"},{"teamNumber":3219,"teamName":"TREAD"}] 

В настоящее время мы добавляем данные используя эту функцию (у нее большая часть ненужного «мяса» обрезана)

def inputTeamData(): 
    global data 
    clear() 
    temp = dataTemplate 

    temp["teamNumber"] = question("Team Number?: ") 
    temp["teamName"] = question("Team Name?: ") 
    temp["foundingSeason"] = question("Founding Season?: ") 

    save = question("Is the above data correct?(y/n): ") 


    if save.lower() == "y": 
     try: 
      data.append(temp) 
     except ValueError: 
      print "ValueError. You gave me the wrong data types" 
      sleep(1) 

      else: 
       print "Not saved" 
       sleep(.8) 

Я не знаю, что дает, хотя ответ более чем вероятно будет глупо очевидным, я не вижу, чтобы найти проблему.

В любом случае, большое спасибо в консультации тем, кто может мне помочь!

+0

ваш упрощенный пример не показывает ошибку. Повторите попытку – Vorsprung

+0

. В чем смысл всей вещи 'temp = dataTemplate'? Я проверил ваш код с 'temp = {}', и он работает достаточно хорошо. Помните, что ключи в словарях (обычно, в вашем случае не обязательно) должны быть созданы, прежде чем добавлять к ним данные. – msvalkon

ответ

6

Вы должны изучить некоторые основы Python первый:

temp = dataTemplate 

не копирует dataTemplate к новой переменной temp! Вместо этого он дает псевдоним «temp» оригинальному словарю, который вы назвали «dataTemplate». Вы изменяете тот же оригинальный словарь каждый раз, когда пишете temp[ .. ] =, потому что «temp» - это просто псевдоним для «dataTemplate».

Вы хотите

temp = dataTemplate.copy() 
+0

Хех, я знал, что это действительно просто. Спасибо за помощь! – THUNDERGROOVE

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