Я немного новичок в python и стараюсь сначала изучить python для анализа данных. У меня есть файл CSV, который выглядит так (ID, категория):Быстрая сортировка файла csv?
67512367,0
67567,5
89789789,5
...
...
876289347,10
638, 10
...
...
98723489,20
3828909, 20
...
...<going upto>
78789789, 200
978789, 200
То, что я хотел бы сделать, это сортировать идентификаторы в соответствии с их категориями. Так, в конце концов, я хотел бы что-то, выглядит следующим образом:
list_5 = [67567, 89789789, .., ]
list_10 = [876289347, 638, ...]
list_200 = [78789789, 978789, ...]
Проблема заключается в том, что файл CSV имеет около 1,5 миллионов словарных статей. Таким образом, я загрузить их в данный момент с помощью izip и читателя Csv так:
data = izip(csv.reader(open("data.csv", "rb")))
и у меня есть записи в data
, которые я могу перебирать с помощью просто:
for i in data:
print i
#print i[0][0] # for ids
#print i[0][1] # for category
Теперь, я знаю, что я могу использовать конструкцию if-else/elif, чтобы проверить, есть ли i[0][1]==5
, а затем добавить i[0][0]
(идентификатор) в список, но это будет выглядеть очень медленно - и мой список большой.
Мне было интересно, есть ли какой-либо другой элегантный способ (может быть, что-то использовать itertools?) До bucketize
идентификаторы, основанные на значении второго столбца (категории).
См. Http://stackoverflow.com/q/25184415/3001761 - здесь будет работать то же решение ('defaultdict (list)') '' 5: [67567, 89789789, ...]. ..} '. – jonrsharpe
Это довольно удивительно - никогда не знала о коллекциях раньше. Решила проблему через минуту. Спасибо за тонну за это. Если бы вы могли ответить на этот вопрос, я приму это. Еще раз спасибо! – JohnJ
Просто указывая, что ваш вызов 'izip' на самом деле для вас ничего не делает. Просто удалите его, и он будет работать так же. – Dougal