Я новичок в программировании, поэтому заранее извиняюсь за любой дрянной код. Этот пример - упрощенная версия моей проблемы. Я получаю данные из двух отдельных файлов, указанных здесь как списки (например, filea и fileb). То, что я хотел бы сделать, это создать единственный словарь (data_dict), для которого ключ является идентификационным номером; здесь как первый элемент в списке (например, 100). Значение будет списком, который добавляется при обновлении. В первом цикле (filea) идентификатор добавляется к списку значений, а затем добавляется значение данных (для этого примера a9999), а затем добавляется в словарь для этого ключа (id).Python обновления ключей и значений в словаре в цикле
Проблема, с которой я столкнулась, заключается в том, чтобы попытаться добавить второй цикл (fileb) правильно. Последний словарь - это результат второго цикла (fileb), который можно увидеть в b9999. Я явно делаю что-то неправильно с извлечением значения ключа из первого цикла, чтобы добавить вторую точку данных во второй цикл. Конечным словарем, который я пытаюсь достичь, является {100: [100, 'a9999', 'b9999'], 101: [100, 'a9999', 'b9999']} без ввода идентификатора дважды в каждый список (например, , [100, «a9999», 100, «b9999»])
filea = [[100,1],[101,1]]
fileb = [[100,2],[101,2]]
def my_func():
data_dict = {} # a dictionary to hold all data
for file in [[filea],[fileb]]:
name = extra_func(file) #this is only added for the simplified example
for lists in file:
for digit_list in lists:
value_list = [] # the list that will be the value of each key in data_dict
id = digit_list[0] #the first item in the list will be the id number
digit_list.pop(0) #then drop the id number from the list
data_dict[id] = id #create a key based on the id number
#print [data_dict.get(id)] # get the value for that key
value_list.append(id) #append the id to the value_list
data = 9999 #this is a placeholder for the example
value_list.append(name + str(data)) #append the data with name (a or b) for readability
data_dict[id] = value_list #add the value the key (id)
#print "data_dict for ", id, data_dict,"\n"
print "data_dict for all ids in file",name, "\n", data_dict,"\n"
return data_dict
def extra_func(file):
if file == [filea]: #this is only added for the simplified example
name = 'a'
if file == [fileb]:
name = 'b'
return name
data_dict = my_func()
print "final dictionary", data_dict
чем проблема, я читал и читать, но не может понять, что вы хотите достичь именно ... – Richard
К сожалению. Я старался быть ясным, но не думаю. Проблема в том, что последний словарь содержит только значения для второго цикла; те значения из fileb – veganscript