с помощью Python 3.3.0, я создал "словарь" из CSV-файла (заголовок: ID;Col1;Col2;Col3;Col4;Col5
):Python3: создать выборочный копию словаря в качестве нового словаря
ID;Col1;Col2;Col3;Col4;Col5
15345;1;1;nnngngn;vhrhtnz;latest
12345;12;8;gnrghrtthr;tznhltrnhklr;latest
90834;3;4;something;nonsens;latest
12345;34;235;dontcare;muhaha;oldone
с кодом
file = "test.csv"
csv_file = csv.DictReader(open(file, 'r'), delimiter=';', quotechar='"')
и я хотел скопировать строки с ID = 12345 в новый словарь, а не в файл. Я действительно хотел скопировать в словарь, а не список, потому что я хотел иметь возможность напрямую обращаться к именам столбцов. Я попробовал это, делая
cewl = {}
for row in csv_file:
if row['ID'] == '12345':
cewl.update(row)
print(cewl)
Выход есть:
{'ID': '12345', 'Col1': '34', 'Col2': '235', 'Col3': 'dontcare', 'Col4': 'muhaha', 'Col5': 'oldone'}
Моя проблема: только вторая строка с ID = 12345, копируется, первый опущен, я не знаю, почему.
Если я пытаюсь это путем копирования в новый список (только для целей тестирования), все работает отлично:
cewl = []
for row in csv_file1:
if row['ID'] == '12345':
cewl.append(row)
print(cewl)
Выход:
[{'Col3': 'gnrghrtthr', 'Col2': '8', 'Col1': '12', 'Col5': 'latest', 'Col4': 'tznhltrnhklr', 'ID': '12345'},
{'Col3': 'dontcare', 'Col2': '235', 'Col1': '34', 'Col5': 'oldone', 'Col4': 'muhaha', 'ID': '12345'}]
Я не знаю, почему это ISN 't работая путем копирования в новый словарь ... там не похоже, что метод .add или .append для dictreader.
Как скопировать данные в новый словарь без каких-либо строк?
Словарь - это сопоставление; решить, хотите ли вы, чтобы ID ('12345') сопоставлялся с двумя или более разными частями данных, как в вашем примере, и в этом случае вы можете сопоставить идентификатор со списком словарей, содержащих различные сопоставления значений для ключей 'Col1', Col2' и т. Д. ИЛИ что-то вроде списка кортежей '(ID, Col1, Col2 и т. Д.)'. Подумайте о своих структурах данных, прежде чем писать какой-либо код. –