Добавление элемента в словарь в цикле

Ниже данные взяты с веб-страницы и содержат записи, как показано ниже (например, таблица с множеством строк):

entry1: key1: value1-1, key2: value2-1, key3: value3-1
entry2: key1: value1-2, key2: value2-2, key3: value3-2
entry3: key1: value3-1, key2: value2-3, key3: value3-3
......
entry100: key1: value100-1, key2: value100-2, key3: value100-3

как я могу использовать словарь для хранения этих данных? данные взяты из списка, поэтому «добавление словаря» должно выполняться в цикле...

вот мое текущее решение:

case_list = {}
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list.update(case)

но case_list в конце содержит только последнюю запись case... Может ли кто-нибудь помочь мне в этом? Я бы ожидал, что case_list содержит 100 записей без какой-либо перезаписи среди записей, и впоследствии мне нужно будет сохранить его в БД.


person Kay    schedule 02.07.2015    source источник
comment
каждая запись представляет собой список, или вы можете показать, что есть в entry_list?   -  person Anand S Kumar    schedule 02.07.2015
comment
Каков формат key1: value1-1, key2: value2-1, key3: value3-1 и как вы храните свои записи в файле?   -  person kasravnd    schedule 02.07.2015
comment
Каков ожидаемый результат? В настоящее время вы просто перезаписываете все ключи на каждой итерации.   -  person bereal    schedule 02.07.2015
comment
case_list.update(case) обновит case_list новыми парами ключ/значение из case и перезапишет значения для существующего случая.   -  person konart    schedule 02.07.2015


Ответы (3)


В вашем текущем коде то, что делает Dictionary.update(), заключается в том, что он обновляет (обновление означает, что значение перезаписывается значением для того же ключа в переданном в словаре) ключах в текущем словаре со значениями из словаря, переданного в качестве параметра к нему (добавление любые новые пары ключ:значение, если они существуют). Один плоский словарь не удовлетворяет вашим требованиям, вам нужен либо список словарей, либо словарь с вложенными словарями.

Если вам нужен список словарей (где каждый элемент в списке будет словарем записи), вы можете сделать case_list в виде списка, а затем добавить к нему case (вместо обновления).

Пример -

case_list = []
for entry in entries_list:
    case = {'key1': entry[0], 'key2': entry[1], 'key3':entry[2] }
    case_list.append(case)

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

case_list = {}
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list[entryname] = case  #you will need to come up with the logic to get the entryname.
person Anand S Kumar    schedule 02.07.2015

Насколько я понимаю, вам нужны данные в словаре, как показано ниже:

key1: value1-1,value1-2,value1-3....value100-1
key2: value2-1,value2-2,value2-3....value100-2
key3: value3-1,value3-2,value3-2....value100-3

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

case_list = {}
for entry in entries_list:
    if key in case_list:
        case_list[key1].append(value)
    else:
        case_list[key1] = [value]
person Deep Shah    schedule 02.07.2015

Более простое решение - используйте copy() вместо прямого добавления dict в list

case_list = []
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list.append(case.copy())

Это не будет иметь никаких дубликатов.

person Harry_pb    schedule 24.03.2021