Как добавить и добавить элемент к последнему добавленному элементу в списке с помощью цикла for - PullRequest
1 голос
/ 16 апреля 2020

У меня есть для l oop, который проходит по каждой строке в CSV, и я создаю словарь, в котором есть список, но список переопределяется, потому что ключ диктовщика повторяется несколько раз, как я могу подвести итог или добавить к списку во второй (1) позиции следующее значение для того же ключа на следующей итерации l oop? потому что с добавлением значение переопределяется, если снова обнаруживается существующий ключ, поэтому значения ключа переопределяются снова и снова.

with open('RawPolicy.csv', newline='') as rulemaker:
    rmatcher = csv.reader(rulemaker, delimiter=" ")

    for i in rmatcher:
        dic[i[2]]=[i[0]],[i[1]]

Поля в CSV:

Sgrupo3 CSGrupo3 LLLLLLLL
Sgrupo4 CSGrupo4 LLLLLLLL

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

{'LLLLLLLL': (['Sgrupo3', 'Sgrupo4'], ['CSGrupo3', 'CSGrupo4'])}

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать dict.setdefault, чтобы инициализировать каждый новый ключ набором из 2 подсписков, а затем перебрать и подсписки, и значения в текущей записи, сжав их, чтобы добавить в каждый список с соответствующим значение:

for *values, key in rmatcher:
    for lst, value in zip(dic.setdefault(key, ([], [])), values):
        lst.append(value)

Демонстрация: https://repl.it/@blhsing / GratefulMountainousProperty

Если ваши значения и ключи не обязательно находятся в первых трех столбцах, вы можете указать индексы напрямую вместо. Следующий код принимает ключ с индексом 6 и значения с индексами 0 и 1:

for row in rmatcher:
    for lst, value in zip(dic.setdefault(row[6], ([], [])), row[:2]):
        lst.append(value)
...