Мой код ниже открывает csv и помещает его в словари с столбцами, являющимися списками. Есть дубликаты ключей, которые не могут измениться. Ключевым является столбец номера счета, который является строкой [1]. Прямо сейчас, если строка «CITY» найдена в строке [8], этот ключ и значение будут удалены. Как написать это, чтобы все другие экземпляры того же ключа (и соответствующих значений) также были удалены?Python Dictionary Pop
with open('c:\\file.csv', 'rb') as f:
reader = csv.reader(f)
result = collections.defaultdict(list)
for row in reader:
key = row[1]
result[key].append([row[0], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12]])
if 'CITY' in row[8]:
result.pop(key)
Вот входной пример:
3929, 56794, 5555551212, August, IL, 62305, Steve, Johnson, City, Max, Folder, 22, 56
3929, 56794, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 85
3929, 58586, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 69
Вот результат я хотел бы:
3929, 58586, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 69
Так с «Сити» находится в первом ряду, оба из строки с номером учетной записи 56794 будут удалены.
Существует не такая вещь, как словарь с «дублирующими ключами». Если вы не хотите, чтобы эта конкретная строка была включена, почему бы вам просто не выполнить этот тест 'if' раньше, а не добавлять, если присутствует CITY? – BrenBarn
Извините, каждая строка в csv становится словарем. Затем некоторые из нескольких слов из нескольких словарей являются дубликатами. Если раньше я делаю тест «если», он только избавится от строки, содержащей строку «CITY». Мне нужно избавиться от этой строки и всех других строк, которые затем содержат тот же номер учетной записи. – Christopher
Ваш код не показывает, что каждая строка становится словарем. Он показывает один словарь, в котором один элемент из каждой строки используется как ключ, и все записи с этим ключом, накапливающимся в список. Ваш код действительно удалит все элементы, которые разделяют этот ключ, но если есть другие более поздние строки с этим ключом, они не будут удалены, потому что их еще нет в то время, когда вы их удаляете. Было бы полезно, если бы вы могли включить выборочные данные с ожидаемым выходом. – BrenBarn